1 | # http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def
|
---|
2 |
|
---|
3 | BEGIN {
|
---|
4 | FS = "("
|
---|
5 | # order so string search is longest string
|
---|
6 | types[0] = "UINTMAX"; vtypes[0] = "unsigned long int"
|
---|
7 | types[1] = "UINT16"; vtypes[1] = "short int"
|
---|
8 | types[2] = "UINT32"; vtypes[2] = "int"
|
---|
9 | types[3] = "UINT64"; vtypes[3] = "long long int"
|
---|
10 | types[4] = "UINT"; vtypes[4] = "unsigned int"
|
---|
11 | types[5] = "INTMAX"; vtypes[5] = "long int"
|
---|
12 | types[6] = "INTPTR"; vtypes[6] = "int *"
|
---|
13 | types[7] = "WINT"; vtypes[7] = "unsigned int"
|
---|
14 | types[8] = "INT"; vtypes[8] = "int"
|
---|
15 | types[9] = "ULONGLONG"; vtypes[9] = "unsigned long long"
|
---|
16 | types[10] = "ULONG"; vtypes[10] = "unsigned long"
|
---|
17 | types[11] = "UNSIGNED"; vtypes[11] = "unsigned"
|
---|
18 | types[12] = "COMPLEX_LONGDOUBLE"; vtypes[12] = "_Complex long double"
|
---|
19 | types[13] = "COMPLEX_DOUBLE"; vtypes[13] = "_Complex double"
|
---|
20 | types[14] = "COMPLEX_FLOAT"; vtypes[14] = "_Complex float"
|
---|
21 | types[15] = "LONGDOUBLEPTR"; vtypes[15] = "long double *"
|
---|
22 | types[16] = "LONGDOUBLE"; vtypes[16] = "long double"
|
---|
23 | types[17] = "LONGLONG"; vtypes[17] = "long long"
|
---|
24 | types[18] = "LONG"; vtypes[18] = "long"
|
---|
25 | types[19] = "DFLOAT32"; vtypes[19] = "_Decimal32"
|
---|
26 | types[20] = "DFLOAT64"; vtypes[20] = "_Decimal64"
|
---|
27 | types[21] = "DFLOAT128"; vtypes[21] = "_Decimal128"
|
---|
28 | types[22] = "DOUBLEPTR"; vtypes[22] = "double *"
|
---|
29 | types[23] = "DOUBLE"; vtypes[23] = "double"
|
---|
30 | types[24] = "FLOATPTR"; vtypes[24] = "float *"
|
---|
31 | types[25] = "FLOAT"; vtypes[25] = "float"
|
---|
32 | types[26] = "CONST_PTR"; vtypes[26] = "const void *"
|
---|
33 | types[27] = "CONST_STRING"; vtypes[27] = "const char *"
|
---|
34 | types[28] = "PTR_FN_VOID_VAR_PTR_SIZE"; vtypes[28] = ""
|
---|
35 | types[29] = "PTR_CONST_STRING"; vtypes[29] = "char *const"
|
---|
36 | types[30] = "PTRMODE_PTR"; vtypes[30] = ""
|
---|
37 | types[31] = "PTRPTR"; vtypes[31] = "void **"
|
---|
38 | types[32] = "PTR"; vtypes[32] = "void *"
|
---|
39 | types[33] = "VOID"; vtypes[33] = "void"
|
---|
40 | types[34] = "STRING"; vtypes[34] = "char *"
|
---|
41 | types[35] = "FILEPTR"; vtypes[35] = "struct _IO_FILE *"
|
---|
42 | types[36] = "SIZE"; vtypes[36] = "unsigned long"
|
---|
43 | types[37] = "VAR"; vtypes[37] = "..."
|
---|
44 | types[38] = "VALIST_ARG"; vtypes[38] = "void **"
|
---|
45 | types[39] = "VALIST_REF"; vtypes[39] = "void **"
|
---|
46 | types[40] = "UNWINDWORD"; vtypes[40] = "void *"
|
---|
47 | types[41] = "WORD"; vtypes[41] = ""
|
---|
48 | types[42] = "SSIZE"; vtypes[42] = "long int"
|
---|
49 | types[43] = "PID"; vtypes[43] = "int"
|
---|
50 | N = 44
|
---|
51 | } # BEGIN
|
---|
52 |
|
---|
53 | /^BT_/ { prototypes[$1] = $1 }
|
---|
54 |
|
---|
55 | END {
|
---|
56 | printf( "#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)\n" );
|
---|
57 | printf( "#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);\n" );
|
---|
58 | printf( "#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)\n\n" );
|
---|
59 |
|
---|
60 | # generate C types for macros names
|
---|
61 | for ( i = 0; i < N; i += 1 ) {
|
---|
62 | printf( "#define BT_%s %s\n", types[i], vtypes[i] )
|
---|
63 | } # for
|
---|
64 | printf( "\n" )
|
---|
65 |
|
---|
66 | for ( prototype in prototypes ) {
|
---|
67 | if ( index( "BT_LAST", prototype ) == 1 ) {
|
---|
68 | continue
|
---|
69 | } # if
|
---|
70 |
|
---|
71 | printf( "#define %s(NAME) FUNC_SIMPLE(", prototype )
|
---|
72 |
|
---|
73 | if ( sub( "BT_FN_", "", prototype ) == 0 ) {
|
---|
74 | printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype )
|
---|
75 | exit 0
|
---|
76 | } # if
|
---|
77 |
|
---|
78 | # generate function return type as macro
|
---|
79 | for ( t = 0; t < N; t += 1 ) { # find longest match
|
---|
80 | type = types[t];
|
---|
81 | if ( index( prototype, type ) == 1 ) { # found match
|
---|
82 | printf( "BT_%s, NAME", type )
|
---|
83 | sub( type, "", prototype )
|
---|
84 | break;
|
---|
85 | } # if
|
---|
86 | } # for
|
---|
87 |
|
---|
88 | # generate function parameter types as macro
|
---|
89 | if ( index( prototype, "VAR" ) != 2 ) { # C-style empty parameters ?
|
---|
90 | for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed
|
---|
91 | sub( "_", "", prototype) # remove "_"
|
---|
92 | printf( ", ", type )
|
---|
93 | temp = prototype
|
---|
94 | for ( t = 0; t < N; t += 1 ) { # find longest match
|
---|
95 | type = types[t];
|
---|
96 | if ( index( prototype, type ) == 1 ) { # found match
|
---|
97 | printf( "BT_%s", type )
|
---|
98 | sub( type, "", prototype )
|
---|
99 | break;
|
---|
100 | } # if
|
---|
101 | } # for
|
---|
102 | if ( temp == prototype ) { # no match found for parameter in macro table
|
---|
103 | printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype )
|
---|
104 | exit 0
|
---|
105 | } # if
|
---|
106 | } # for
|
---|
107 | } # if
|
---|
108 | printf( ")\n" )
|
---|
109 | } # for
|
---|
110 |
|
---|
111 | # extras
|
---|
112 | printf( "\n#include \"builtins.def\"\n\n" );
|
---|
113 | printf( "typedef void ** __builtin_va_list;\n" );
|
---|
114 | printf( "extern const char *__PRETTY_FUNCTION__;\n" );
|
---|
115 | printf( "typedef int wchar_t;\n" );
|
---|
116 | } # END
|
---|