| 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 : Tue Jul  5 14:32:52 2016 | 
|---|
| 13 | # Update Count     : 32 | 
|---|
| 14 | # | 
|---|
| 15 |  | 
|---|
| 16 | # http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def | 
|---|
| 17 |  | 
|---|
| 18 | BEGIN { | 
|---|
| 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] = "__builtin_va_list" | 
|---|
| 60 | types[39] = "VALIST_REF";                           vtypes[39] = "__builtin_va_list" | 
|---|
| 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 |  | 
|---|
| 70 | END { | 
|---|
| 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( "extern const char *__PRETTY_FUNCTION__;\n" ); | 
|---|
| 129 | } # END | 
|---|
| 130 |  | 
|---|
| 131 | # Local Variables: # | 
|---|
| 132 | # tab-width: 4 # | 
|---|
| 133 | # mode: awk # | 
|---|
| 134 | # compile-command: "make install" # | 
|---|
| 135 | # End: # | 
|---|