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