source: libcfa/prelude/prototypes.awk @ f3c02ea

Last change on this file since f3c02ea was 8c9da33, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

formatting

  • Property mode set to 100644
File size: 6.2 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 Feb  8 09:46:58 2020
13# Update Count     : 36
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        i=-1
22        types[i+=1] = "BOOL";                                           vtypes[i] = "_Bool"
23        types[i+=1] = "UINTMAX";                                        vtypes[i] = "unsigned long int"
24        types[i+=1] = "UINT16";                                         vtypes[i] = "short int"
25        types[i+=1] = "UINT32";                                         vtypes[i] = "int"
26        types[i+=1] = "UINT64";                                         vtypes[i] = "long long int"
27        types[i+=1] = "UINT";                                           vtypes[i] = "unsigned int"
28        types[i+=1] = "INTMAX";                                         vtypes[i] = "long int"
29        types[i+=1] = "INTPTR";                                         vtypes[i] = "int *"
30        types[i+=1] = "WINT";                                           vtypes[i] = "unsigned int"
31        types[i+=1] = "INT";                                            vtypes[i] = "int"
32        types[i+=1] = "ULONGLONG";                                      vtypes[i] = "unsigned long long"
33        types[i+=1] = "ULONG";                                          vtypes[i] = "unsigned long"
34        types[i+=1] = "UNSIGNED";                                       vtypes[i] = "unsigned"
35        types[i+=1] = "COMPLEX_LONGDOUBLE";                     vtypes[i] = "_Complex long double"
36        types[i+=1] = "COMPLEX_DOUBLE";                         vtypes[i] = "_Complex double"
37        types[i+=1] = "COMPLEX_FLOAT";                          vtypes[i] = "_Complex float"
38        types[i+=1] = "LONGDOUBLEPTR";                          vtypes[i] = "long double *"
39        types[i+=1] = "LONGDOUBLE";                                     vtypes[i] = "long double"
40        types[i+=1] = "LONGLONG";                                       vtypes[i] = "long long"
41        types[i+=1] = "LONG";                                           vtypes[i] = "long"
42        types[i+=1] = "DFLOAT32";                                       vtypes[i] = "__Unsupported"
43        types[i+=1] = "DFLOAT64";                                       vtypes[i] = "__Unsupported"
44        types[i+=1] = "DFLOAT128";                                      vtypes[i] = "__Unsupported"
45        types[i+=1] = "DOUBLEPTR";                                      vtypes[i] = "double *"
46        types[i+=1] = "DOUBLE";                                         vtypes[i] = "double"
47        types[i+=1] = "FLOATPTR";                                       vtypes[i] = "float *"
48        types[i+=1] = "FLOAT128X";                                      vtypes[i] = "__Unsupported"
49        types[i+=1] = "FLOAT128";                                       vtypes[i] = "__Unsupported"
50        types[i+=1] = "FLOAT64X";                                       vtypes[i] = "__Unsupported"
51        types[i+=1] = "FLOAT64";                                        vtypes[i] = "__Unsupported"
52        types[i+=1] = "FLOAT32X";                                       vtypes[i] = "__Unsupported"
53        types[i+=1] = "FLOAT32";                                        vtypes[i] = "__Unsupported"
54        types[i+=1] = "FLOAT16";                                        vtypes[i] = "__Unsupported"
55        types[i+=1] = "FLOAT";                                          vtypes[i] = "float"
56        types[i+=1] = "CONST_VPTR";                                     vtypes[i] = "const volatile void *"
57        types[i+=1] = "CONST_PTR";                                      vtypes[i] = "const void *"
58        types[i+=1] = "CONST_STRING";                           vtypes[i] = "const char *"
59        types[i+=1] = "CONST_TM_PTR";                           vtypes[i] = "const struct tm *"
60        types[i+=1] = "PTR_FN_VOID_VAR_PTR_SIZE";       vtypes[i] = ""
61        types[i+=1] = "PTR_CONST_STRING";                       vtypes[i] = "char *const"
62        types[i+=1] = "PTRMODE_PTR";                            vtypes[i] = ""
63        types[i+=1] = "PTRPTR";                                         vtypes[i] = "void **"
64        types[i+=1] = "VPTR";                                           vtypes[i] = "volatile void *"
65        types[i+=1] = "PTR";                                            vtypes[i] = "void *"
66        types[i+=1] = "VOID";                                           vtypes[i] = "void"
67        types[i+=1] = "STRING";                                         vtypes[i] = "char *"
68        types[i+=1] = "FILEPTR";                                        vtypes[i] = "struct _IO_FILE *"
69        types[i+=1] = "SIZE";                                           vtypes[i] = "unsigned long"
70        types[i+=1] = "VAR";                                            vtypes[i] = "..."
71        types[i+=1] = "VALIST_ARG";                                     vtypes[i] = "__builtin_va_list"
72        types[i+=1] = "VALIST_REF";                                     vtypes[i] = "__builtin_va_list"
73        types[i+=1] = "UNWINDWORD";                                     vtypes[i] = "void *"
74        types[i+=1] = "WORD";                                           vtypes[i] = ""
75        types[i+=1] = "SSIZE";                                          vtypes[i] = "long int"
76        types[i+=1] = "PID";                                            vtypes[i] = "int"
77        types[i+=1] = "I16";                                            vtypes[i] = "__int128"
78        types[i+=1] = "I8";                                                     vtypes[i] = "long long int"
79        types[i+=1] = "I4";                                                     vtypes[i] = "int"
80        types[i+=1] = "I2";                                                     vtypes[i] = "short"
81        types[i+=1] = "I1";                                                     vtypes[i] = "char"
82        N = i + 1
83} # BEGIN
84
85/BT_FN/ {
86        for (i = 1; i <= NF; i += 1 ) {
87                if ( match($i, "BT_FN") != 0 ) {
88                        prototypes[$i] = $i
89                }
90        }
91}
92
93END {
94        printf( "#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)\n" );
95        printf( "#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);\n" );
96        printf( "#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)\n\n" );
97
98        # generate C types for macros names
99        for ( i = 0; i < N; i += 1 ) {
100                printf( "#define BT_%s %s\n", types[i], vtypes[i] )
101        } # for
102        printf( "\n" )
103
104        for ( prototype in prototypes ) {
105                # printf( "//\"%s\"\n", prototype )
106                if ( index( "BT_LAST", prototype ) == 1 ) {
107                        continue
108                } # if
109
110                printf( "#define %s(NAME) FUNC_SIMPLE(", prototype )
111
112                if ( sub( "BT_FN_", "", prototype ) == 0 ) {
113                        printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype )
114                        exit 0
115                } # if
116
117                # generate function return type as macro
118                for ( t = 0; t < N; t += 1 ) {                                  # find longest match
119                        type = types[t];
120                        if ( index( prototype, type ) == 1 ) {          # found match
121                                printf( "BT_%s, NAME", type )
122                                sub( type, "", prototype )
123                                break;
124                        } # if
125                } # for
126
127                # generate function parameter types as macro
128                if ( index( prototype, "VAR" ) != 2 ) {                 # C-style empty parameters ?
129                        for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed
130                                sub( "_", "", prototype)                                # remove "_"
131                                printf( ", ", type )
132                                temp = prototype
133                                for ( t = 0; t < N; t += 1 ) {                  # find longest match
134                                        type = types[t];
135                                        if ( index( prototype, type ) == 1 ) { # found match
136                                                printf( "BT_%s", type )
137                                                sub( type, "", prototype )
138                                                break;
139                                        } # if
140                                } # for
141                                if ( temp == prototype ) {                              # no match found for parameter in macro table
142                                        printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype )
143                                        exit 0
144                                } # if
145                        } # for
146                } # if
147                printf( ")\n" )
148        } # for
149
150        # extras
151        printf( "\n#include \"builtins.def\"\n\n" );
152        printf( "\n#include \"sync-builtins.cf\"\n\n" );
153        printf( "extern const char *__PRETTY_FUNCTION__;\n" );
154        printf( "float _Complex __builtin_complex( float, float );\n" );
155        printf( "double _Complex __builtin_complex( double, double );\n" );
156        printf( "long double _Complex __builtin_complex( long double, long double );\n" );
157} # END
158
159# Local Variables: #
160# tab-width: 4 #
161# mode: awk #
162# compile-command: "make install" #
163# End: #
Note: See TracBrowser for help on using the repository browser.