[b87a5ed] | 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 | |
---|
[bdd516a] | 16 | # http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def |
---|
| 17 | |
---|
[2c2242c] | 18 | BEGIN { |
---|
| 19 | FS = "(" |
---|
[ad8e062] | 20 | # order so string search is longest string |
---|
[b87a5ed] | 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" |
---|
[2c2242c] | 33 | types[12] = "COMPLEX_LONGDOUBLE"; vtypes[12] = "_Complex long double" |
---|
[b87a5ed] | 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 *" |
---|
[2c2242c] | 49 | types[28] = "PTR_FN_VOID_VAR_PTR_SIZE"; vtypes[28] = "" |
---|
[b87a5ed] | 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" |
---|
[2c2242c] | 65 | N = 44 |
---|
[ad8e062] | 66 | } # BEGIN |
---|
[2c2242c] | 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 | |
---|
[ad8e062] | 75 | # generate C types for macros names |
---|
[2c2242c] | 76 | for ( i = 0; i < N; i += 1 ) { |
---|
[b87a5ed] | 77 | printf( "#define BT_%s %s\n", types[i], vtypes[i] ) |
---|
[ad8e062] | 78 | } # for |
---|
[2c2242c] | 79 | printf( "\n" ) |
---|
| 80 | |
---|
| 81 | for ( prototype in prototypes ) { |
---|
[b87a5ed] | 82 | if ( index( "BT_LAST", prototype ) == 1 ) { |
---|
| 83 | continue |
---|
| 84 | } # if |
---|
[643a2e1] | 85 | |
---|
[b87a5ed] | 86 | printf( "#define %s(NAME) FUNC_SIMPLE(", prototype ) |
---|
[ad8e062] | 87 | |
---|
[b87a5ed] | 88 | if ( sub( "BT_FN_", "", prototype ) == 0 ) { |
---|
| 89 | printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype ) |
---|
| 90 | exit 0 |
---|
| 91 | } # if |
---|
[ad8e062] | 92 | |
---|
[b87a5ed] | 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 |
---|
[2c2242c] | 101 | } # for |
---|
[b87a5ed] | 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 |
---|
[2c2242c] | 122 | } # if |
---|
[b87a5ed] | 123 | printf( ")\n" ) |
---|
[ad8e062] | 124 | } # for |
---|
[2c2242c] | 125 | |
---|
[ad8e062] | 126 | # extras |
---|
[2c2242c] | 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" ); |
---|
[ad8e062] | 131 | } # END |
---|
[b87a5ed] | 132 | |
---|
| 133 | # Local Variables: # |
---|
| 134 | # tab-width: 4 # |
---|
| 135 | # mode: awk # |
---|
| 136 | # compile-command: "make install" # |
---|
| 137 | # End: # |
---|