add more ffi types; add typedefs
[m6w6/ext-psi] / idl / lexer.h
1 #define BSIZE 256
2
3 typedef int token_t;
4 typedef char text;
5
6 typedef struct PSI_Token {
7 token_t type;
8 unsigned line;
9 size_t size;
10 text text[1];
11 } PSI_Token;
12
13 typedef struct impls impls;
14 typedef struct decls decls;
15 typedef struct decl_typedefs decl_typedefs;
16
17 typedef struct PSI_Lexer {
18 FILE *fp;
19 char *fn;
20 char *lib;
21 decl_typedefs *defs;
22 decls *decls;
23 impls *impls;
24 size_t line;
25 text *cur, *tok, *lim, *eof, *ctx, *mrk, buf[BSIZE];
26 } PSI_Lexer;
27
28 PSI_Lexer *PSI_LexerInit(PSI_Lexer *L, const char *filename);
29 size_t PSI_LexerFill(PSI_Lexer *L, size_t n);
30 token_t PSI_LexerScan(PSI_Lexer *L);
31 void PSI_LexerDtor(PSI_Lexer *L);
32 void PSI_LexerFree(PSI_Lexer **L);
33
34 PSI_Token *PSI_TokenAlloc(PSI_Lexer *L, token_t t);