1+ import cpp
2+
3+ /**
4+ * Namespace for containing emergent language features in C11.
5+ */
6+ module C11 {
7+ abstract class EmergentLanguageFeature extends Element { }
8+
9+ class AlignAsAttribute extends EmergentLanguageFeature , Attribute {
10+ AlignAsAttribute ( ) { getName ( ) = "_Alignas" }
11+ }
12+
13+ class AtomicVariableSpecifier extends EmergentLanguageFeature , Variable {
14+ AtomicVariableSpecifier ( ) {
15+ getType ( ) .( DerivedType ) .getBaseType * ( ) .getASpecifier ( ) .getName ( ) = "atomic"
16+ }
17+ }
18+
19+ class AtomicDeclaration extends EmergentLanguageFeature , Declaration {
20+ AtomicDeclaration ( ) { getASpecifier ( ) .getName ( ) = "atomic" }
21+ }
22+
23+ class ThreadLocalDeclaration extends EmergentLanguageFeature , Declaration {
24+ ThreadLocalDeclaration ( ) { getASpecifier ( ) .getName ( ) = "is_thread_local" }
25+ }
26+
27+ class EmergentHeader extends EmergentLanguageFeature , Include {
28+ EmergentHeader ( ) {
29+ getIncludedFile ( ) .getBaseName ( ) = [ "stdalign.h" , "stdatomic.h" , "stdnoreturn.h" , "threads.h" ]
30+ }
31+ }
32+
33+ class LibExt1Macro extends EmergentLanguageFeature , Macro {
34+ LibExt1Macro ( ) {
35+ getName ( ) = "__STDC_WANT_LIB_EXT1__" and
36+ getBody ( ) = "1"
37+ }
38+ }
39+
40+ class GenericMacro extends EmergentLanguageFeature , Macro {
41+ GenericMacro ( ) { getBody ( ) .indexOf ( "_Generic" ) = 0 }
42+ }
43+
44+ class NoReturnSpecificer extends EmergentLanguageFeature , Function {
45+ NoReturnSpecificer ( ) { getASpecifier ( ) .getName ( ) = "noreturn" }
46+ }
47+
48+ class AlignOf extends EmergentLanguageFeature , AlignofTypeOperator { }
49+ }
0 commit comments