1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%option stack 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%x comment 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%x api_entry 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%x api_entry2 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%x api_entry_param 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%x var_type 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 9326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsDIGIT [0-9] 10326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsID [a-zA-Z_][a-zA-Z0-9_]* 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 1284614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato #include "spec.h" 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int num_lines = 0; 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams VarType *currType = 0; 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ApiEntry apis[128]; 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int apiCount = 0; 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int typeNextState; 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2370b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk void checkPointerType() { 242008747941749ad27fe80663d23036ac320e998fJason Sams VarType *baseType = currType; 252008747941749ad27fe80663d23036ac320e998fJason Sams int curPtrLevel = 0; 262008747941749ad27fe80663d23036ac320e998fJason Sams while (curPtrLevel < baseType->ptrLevel) { 2770b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk currType = &apis[apiCount].params[apis[apiCount].paramCount]; 2870b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk currType->type = 4; 292008747941749ad27fe80663d23036ac320e998fJason Sams currType->ptrLevel = curPtrLevel; 302008747941749ad27fe80663d23036ac320e998fJason Sams if (currType->ptrLevel > 0) { 312008747941749ad27fe80663d23036ac320e998fJason Sams currType->isConst = 1; 322008747941749ad27fe80663d23036ac320e998fJason Sams } 3370b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk sprintf(currType->typeName, "%s", "size_t"); 342008747941749ad27fe80663d23036ac320e998fJason Sams switch(baseType->ptrLevel - curPtrLevel) { 352008747941749ad27fe80663d23036ac320e998fJason Sams case 1: 362008747941749ad27fe80663d23036ac320e998fJason Sams sprintf(currType->name, "%s_length", baseType->name); 372008747941749ad27fe80663d23036ac320e998fJason Sams break; 382008747941749ad27fe80663d23036ac320e998fJason Sams case 2: 392008747941749ad27fe80663d23036ac320e998fJason Sams sprintf(currType->name, "%s_length_length", baseType->name); 402008747941749ad27fe80663d23036ac320e998fJason Sams break; 4170b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk } 4270b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk apis[apiCount].paramCount++; 432008747941749ad27fe80663d23036ac320e998fJason Sams curPtrLevel ++; 4470b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk } 4570b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk } 4670b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk 4784614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato extern "C" int yylex(); 4884614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%% 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams"/*" BEGIN(comment); 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<comment>[^*\n]* /* eat anything that's not a '*' */ 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<comment>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<comment>\n ++num_lines; 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<comment>"*"+"/" BEGIN(INITIAL); 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<*>" " //printf("found ' '\n"); 58186e59154a0fb86e05e283e9c083b69878c06720Jason Sams<*>"\t" //printf("found ' '\n"); 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<*>"\n" ++num_lines; //printf("found lf \n"); 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ID} { 62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memset(&apis[apiCount], 0, sizeof(ApiEntry)); 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memcpy(apis[apiCount].name, yytext, yyleng); 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(api_entry); 65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry>"{" { 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(api_entry2); 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry2>"sync" { 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams apis[apiCount].sync = 1; 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 759397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams<api_entry2>"handcodeApi" { 769397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams apis[apiCount].handcodeApi = 1; 779397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 789397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams 79186e59154a0fb86e05e283e9c083b69878c06720Jason Sams<api_entry2>"direct" { 80186e59154a0fb86e05e283e9c083b69878c06720Jason Sams apis[apiCount].direct = 1; 81186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } 82186e59154a0fb86e05e283e9c083b69878c06720Jason Sams 83186e59154a0fb86e05e283e9c083b69878c06720Jason Sams<api_entry2>"nocontext" { 84186e59154a0fb86e05e283e9c083b69878c06720Jason Sams apis[apiCount].nocontext = 1; 859397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 869397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry2>"ret" { 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType = &apis[apiCount].ret; 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams typeNextState = api_entry2; 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(var_type); 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry2>"param" { 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType = &apis[apiCount].params[apis[apiCount].paramCount]; 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams apis[apiCount].paramCount++; 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams typeNextState = api_entry_param; 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(var_type); 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"const" { 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->isConst = 1; 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"i8" { 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 1; 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 8; 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"i16" { 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 1; 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 16; 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"i32" { 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 1; 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 32; 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"i64" { 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 1; 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 64; 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"u8" { 129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 2; 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 8; 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"u16" { 135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 2; 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 16; 137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"u32" { 141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 2; 142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 32; 143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"u64" { 147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 2; 148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 64; 149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"f" { 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 3; 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 32; 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>"d" { 159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 3; 160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 64; 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<var_type>{ID} { 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->type = 4; 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->bits = 32; 16784614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato memcpy(currType->typeName, yytext, yyleng); 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(typeNextState); 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry_param>"*" { 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams currType->ptrLevel ++; 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry_param>{ID} { 176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memcpy(currType->name, yytext, yyleng); 17770b83c111beceaf8fbb700580833e7fec99272cfAlex Sakhartchouk checkPointerType(); 178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(api_entry2); 179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 181a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams<api_entry2>"*" { 182a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams currType->ptrLevel ++; 183a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams } 184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams<api_entry2>"}" { 186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams apiCount++; 187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams BEGIN(INITIAL); 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams%% 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsint yywrap() 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return 1; 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 199