forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspec.td
144 lines (115 loc) · 3.95 KB
/
spec.td
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
class Type {}
class NamedType<string name> : Type {
string Name = name;
}
class Field<string name, Type type> {
string Name = name;
Type FieldType = type;
}
// Class to describe concrete structs specified by a standard.
class Struct<string name> : NamedType<name> {
list<Field> Fields;
}
class EnumNameValue<string name, string value = "__default_enum_value__"> {
string Name = name;
string Value = value;
}
class Enum<string name, list<EnumNameValue> enumerations> : NamedType<name> {
list<EnumNameValue> Enumerations = enumerations;
}
class PtrType<Type type> : Type {
Type PointeeType = type;
}
class ConstType<Type type> : Type {
Type UnqualifiedType = type;
}
class RestrictedPtrType<Type type> : Type {
Type PointeeType = type;
}
// Builtin types.
def VarArgType : Type {}
def VoidType : NamedType<"void">;
def IntType : NamedType<"int">;
def LongType : NamedType<"long">;
def UnsignedLongType : NamedType<"unsigned long">;
def LongLongType : NamedType<"long long">;
def UnsignedLongLongType : NamedType<"unsigned long long">;
def FloatType : NamedType<"float">;
def DoubleType : NamedType<"double">;
def LongDoubleType : NamedType<"long double">;
def CharType : NamedType<"char">;
// Common types
def VoidPtr : PtrType<VoidType>;
def ConstVoidPtr : ConstType<VoidPtr>;
def SizeTType : NamedType<"size_t">;
def LongDoublePtr : PtrType<LongDoubleType>;
def IntMaxTType : NamedType<"intmax_t">;
def UIntMaxTType : NamedType<"uintmax_t">;
// _Noreturn is really not a type, but it is convenient to treat it as a type.
def NoReturn : NamedType<"_Noreturn void">;
//types moved from stdc.td
def VoidRestrictedPtr : RestrictedPtrType<VoidType>;
def ConstVoidRestrictedPtr : ConstType<VoidRestrictedPtr>;
def CharPtr : PtrType<CharType>;
def ConstCharPtr : ConstType<CharPtr>;
def CharRestrictedPtr : RestrictedPtrType<CharType>;
def CharRestrictedPtrPtr : RestrictedPtrType<CharPtr>;
def ConstCharRestrictedPtr : ConstType<CharRestrictedPtr>;
def OnceFlagType : NamedType<"once_flag">;
def OnceFlagTypePtr : PtrType<OnceFlagType>;
// TODO(sivachandra): Remove this non-standard type when a formal
// way to describe callable types is available.
def CallOnceFuncType : NamedType<"__call_once_func_t">;
def MtxTType : NamedType<"mtx_t">;
def MtxTTypePtr : PtrType<MtxTType>;
def CndTType : NamedType<"cnd_t">;
def CndTTypePtr : PtrType<CndTType>;
def ThrdStartTType : NamedType<"thrd_start_t">;
def ThrdTType : NamedType<"thrd_t">;
def ThrdTTypePtr : PtrType<ThrdTType>;
def IntPtr : PtrType<IntType>;
def FloatPtr : PtrType<FloatType>;
def DoublePtr : PtrType<DoubleType>;
def SigHandlerT : NamedType<"__sighandler_t">;
def TimeTType : NamedType<"time_t">;
def BSearchCompareT : NamedType<"__bsearchcompare_t">;
def QSortCompareT : NamedType<"__qsortcompare_t">;
//added because __assert_fail needs it.
def UnsignedType : NamedType<"unsigned">;
class Macro<string name> {
string Name = name;
}
class EnumeratedNameValue<string name, string value = "__default__"> {
string Name = name;
string Value = value;
}
class Annotation {}
class RetValSpec<Type type, list<Annotation> annotations = []> {
Type ReturnType = type;
list<Annotation> Annotations = annotations;
}
class ArgSpec<Type type, list<Annotation> annotations = [], string name = ""> {
Type ArgType = type;
list<Annotation> Annotations = annotations;
string Name = name;
}
class FunctionSpec<string name, RetValSpec return, list<ArgSpec> args> {
string Name = name;
RetValSpec Return = return;
list<ArgSpec> Args = args;
}
class HeaderSpec<string name,
list<Macro> macros = [],
list<Type> types = [],
list<EnumeratedNameValue> enumerations = [],
list<FunctionSpec> functions = []> {
string Name = name;
list<FunctionSpec> Functions = functions;
list<Type> Types = types;
list<Macro> Macros = macros;
list<EnumeratedNameValue> Enumerations = enumerations;
}
class StandardSpec<string name> {
string Name = name;
list<HeaderSpec> Headers;
}