source: libcfa/prototypes.awk @ ecb1534

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsctordeferred_resndemanglerenumforall-pointer-decaygc_noraiijacob/cs343-translationjenkins-sandboxmemorynew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newstringwith_gc
Last change on this file since ecb1534 was b87a5ed, checked in by Peter A. Buhr <pabuhr@…>, 10 years ago

licencing: first groups of files

  • Property mode set to 100644
File size: 5.1 KB
Line 
1#
2# Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
3#
4# The contents of this file are covered under the licence agreement in the
5# file "LICENCE" distributed with Cforall.
6#
7# prototypes.awk --
8#
9# Author           : Peter A. Buhr
10# Created On       : Sat May 16 07:57:37 2015
11# Last Modified By : Peter A. Buhr
12# Last Modified On : Sat May 16 08:02:10 2015
13# Update Count     : 3
14#
15
16# http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def
17
18BEGIN {
19    FS = "("
20    # order so string search is longest string
21    types[0]  = "UINTMAX";                                      vtypes[0]  = "unsigned long int"
22    types[1]  = "UINT16";                                       vtypes[1]  = "short int"
23    types[2]  = "UINT32";                                       vtypes[2]  = "int"
24    types[3]  = "UINT64";                                       vtypes[3]  = "long long int"
25    types[4]  = "UINT";                                         vtypes[4]  = "unsigned int"
26    types[5]  = "INTMAX";                                       vtypes[5]  = "long int"
27    types[6]  = "INTPTR";                                       vtypes[6]  = "int *"
28    types[7]  = "WINT";                                         vtypes[7]  = "unsigned int"
29    types[8]  = "INT";                                          vtypes[8]  = "int"
30    types[9]  = "ULONGLONG";                            vtypes[9]  = "unsigned long long"
31    types[10] = "ULONG";                                        vtypes[10] = "unsigned long"
32    types[11] = "UNSIGNED";                                     vtypes[11] = "unsigned"
33    types[12] = "COMPLEX_LONGDOUBLE";           vtypes[12] = "_Complex long double"
34    types[13] = "COMPLEX_DOUBLE";                       vtypes[13] = "_Complex double"
35    types[14] = "COMPLEX_FLOAT";                        vtypes[14] = "_Complex float"
36    types[15] = "LONGDOUBLEPTR";                        vtypes[15] = "long double *"
37    types[16] = "LONGDOUBLE";                           vtypes[16] = "long double"
38    types[17] = "LONGLONG";                                     vtypes[17] = "long long"
39    types[18] = "LONG";                                         vtypes[18] = "long"
40    types[19] = "DFLOAT32";                                     vtypes[19] = "_Decimal32"
41    types[20] = "DFLOAT64";                                     vtypes[20] = "_Decimal64"
42    types[21] = "DFLOAT128";                            vtypes[21] = "_Decimal128"
43    types[22] = "DOUBLEPTR";                            vtypes[22] = "double *"
44    types[23] = "DOUBLE";                                       vtypes[23] = "double"
45    types[24] = "FLOATPTR";                                     vtypes[24] = "float *"
46    types[25] = "FLOAT";                                        vtypes[25] = "float"
47    types[26] = "CONST_PTR";                            vtypes[26] = "const void *"
48    types[27] = "CONST_STRING";                         vtypes[27] = "const char *"
49    types[28] = "PTR_FN_VOID_VAR_PTR_SIZE";     vtypes[28] = ""
50    types[29] = "PTR_CONST_STRING";                     vtypes[29] = "char *const"
51    types[30] = "PTRMODE_PTR";                          vtypes[30] = ""
52    types[31] = "PTRPTR";                                       vtypes[31] = "void **"
53    types[32] = "PTR";                                          vtypes[32] = "void *"
54    types[33] = "VOID";                                         vtypes[33] = "void"
55    types[34] = "STRING";                                       vtypes[34] = "char *"
56    types[35] = "FILEPTR";                                      vtypes[35] = "struct _IO_FILE *"
57    types[36] = "SIZE";                                         vtypes[36] = "unsigned long"
58    types[37] = "VAR";                                          vtypes[37] = "..."
59    types[38] = "VALIST_ARG";                           vtypes[38] = "void **"
60    types[39] = "VALIST_REF";                           vtypes[39] = "void **"
61    types[40] = "UNWINDWORD";                           vtypes[40] = "void *"
62    types[41] = "WORD";                                         vtypes[41] = ""
63    types[42] = "SSIZE";                                        vtypes[42] = "long int"
64    types[43] = "PID";                                          vtypes[43] = "int"
65    N = 44
66} # BEGIN
67
68/^BT_/ { prototypes[$1] = $1 }
69
70END {
71    printf( "#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)\n" );
72    printf( "#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);\n" );
73    printf( "#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)\n\n" );
74
75    # generate C types for macros names
76    for ( i = 0; i < N; i += 1 ) {
77                printf( "#define BT_%s %s\n", types[i], vtypes[i] )
78    } # for
79    printf( "\n" )
80
81    for ( prototype in prototypes ) {
82                if ( index( "BT_LAST", prototype ) == 1 ) {
83                        continue
84                } # if
85
86                printf( "#define %s(NAME) FUNC_SIMPLE(", prototype )
87
88                if ( sub( "BT_FN_", "", prototype ) == 0 ) {
89                        printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype )
90                        exit 0
91                } # if
92
93                # generate function return type as macro
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, NAME", type )
98                                sub( type, "", prototype )
99                                break;
100                        } # if
101                } # for
102
103                # generate function parameter types as macro
104                if ( index( prototype, "VAR" ) != 2 ) {                 # C-style empty parameters ?
105                        for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed
106                                sub( "_", "", prototype)                                # remove "_"
107                                printf( ", ", type )
108                                temp = prototype
109                                for ( t = 0; t < N; t += 1 ) {                  # find longest match
110                                        type = types[t];
111                                        if ( index( prototype, type ) == 1 ) { # found match
112                                                printf( "BT_%s", type )
113                                                sub( type, "", prototype )
114                                                break;
115                                        } # if
116                                } # for
117                                if ( temp == prototype ) {                              # no match found for parameter in macro table
118                                        printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype )
119                                        exit 0
120                                } # if
121                        } # for
122                } # if
123                printf( ")\n" )
124    } # for
125
126    # extras
127    printf( "\n#include \"builtins.def\"\n\n" );
128    printf( "typedef void ** __builtin_va_list;\n" );
129    printf( "extern const char *__PRETTY_FUNCTION__;\n" );
130    printf( "typedef int wchar_t;\n" );
131} # END
132
133# Local Variables: #
134# tab-width: 4 #
135# mode: awk #
136# compile-command: "make install" #
137# End: #
Note: See TracBrowser for help on using the repository browser.