projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
add more ffi types; add typedefs
[m6w6/ext-psi]
/
idl
/
lexer.re
diff --git
a/idl/lexer.re
b/idl/lexer.re
index 3d1c660e82c61d260515a0620c60cd99afbf7a67..d52436ae361a146e0eefcb702ebdaedc36402a15 100644
(file)
--- a/
idl/lexer.re
+++ b/
idl/lexer.re
@@
-19,11
+19,18
@@
PSI_Token *PSI_TokenAlloc(PSI_Lexer *L, token_t t)
{
PSI_Token *T;
PSI_Token *PSI_TokenAlloc(PSI_Lexer *L, token_t t)
{
PSI_Token *T;
- size_t token_len = L->cur - L->tok;
+ size_t token_len;
+
+ if (L->cur <= L->tok) {
+ return NULL;
+ }
+
+ token_len = L->cur - L->tok;
T = malloc(sizeof(*T) + token_len);
T->type = t;
T->line = L->line;
T = malloc(sizeof(*T) + token_len);
T->type = t;
T->line = L->line;
+ T->size = token_len;
T->text[token_len] = 0;
memcpy(T->text, L->tok, token_len);
T->text[token_len] = 0;
memcpy(T->text, L->tok, token_len);
@@
-73,21
+80,17
@@
void PSI_LexerDtor(PSI_Lexer *L)
if (L->fn) {
free(L->fn);
}
if (L->fn) {
free(L->fn);
}
- if (L->decl.list) {
- size_t i;
-
- for (i = 0; i < L->decl.count; ++i) {
- free_decl(L->decl.list[i]);
- }
- free(L->decl.list);
+ if (L->lib) {
+ free(L->lib);
}
}
- if (L->impl.list) {
- size_t i;
-
- for (i = 0; i < L->impl.count; ++i) {
- free_impl(L->impl.list[i]);
- }
- free(L->impl.list);
+ if (L->defs) {
+ free_decl_typedefs(L->defs);
+ }
+ if (L->decls) {
+ free_decls(L->decls);
+ }
+ if (L->impls) {
+ free_impls(L->impls);
}
memset(L, 0, sizeof(*L));
}
}
memset(L, 0, sizeof(*L));
}
@@
-141,7
+144,8
@@
token_t PSI_LexerScan(PSI_Lexer *L)
B = [^a-zA-Z0-9_];
W = [a-zA-Z0-9_];
NAME = W+;
B = [^a-zA-Z0-9_];
W = [a-zA-Z0-9_];
NAME = W+;
- NSNAME = NAME ("\\" NAME)+;
+ NSNAME = (NAME)? ("\\" NAME)+;
+ QUOTED_STRING = "\"" ([^\"])+ "\"";
NULL = 'NULL';
MIXED = 'mixed';
VOID = 'void';
NULL = 'NULL';
MIXED = 'mixed';
VOID = 'void';
@@
-151,9
+155,17
@@
token_t PSI_LexerScan(PSI_Lexer *L)
DOUBLE = 'double';
SINT8 = 'sint8';
UINT8 = 'uint8';
DOUBLE = 'double';
SINT8 = 'sint8';
UINT8 = 'uint8';
+ SINT16 = 'sint16';
+ UINT16 = 'uint16';
+ SINT32 = 'sint32';
+ UINT32 = 'uint32';
+ SINT64 = 'sint64';
+ UINT64 = 'uint64';
STRING = 'string';
ARRAY = 'array';
FUNCTION = 'function';
STRING = 'string';
ARRAY = 'array';
FUNCTION = 'function';
+ TYPEDEF = 'typedef';
+ LIB = 'lib';
LET = 'let';
SET = 'set';
RET = 'ret';
LET = 'let';
SET = 'set';
RET = 'ret';
@@
-172,8
+184,8
@@
token_t PSI_LexerScan(PSI_Lexer *L)
";" {return PSI_T_EOS;}
"," {return PSI_T_COMMA;}
":" {return PSI_T_COLON;}
";" {return PSI_T_EOS;}
"," {return PSI_T_COMMA;}
":" {return PSI_T_COLON;}
- "{" {return PSI_T_L
CURLY
;}
- "}" {return PSI_T_R
CURLY
;}
+ "{" {return PSI_T_L
BRACE
;}
+ "}" {return PSI_T_R
BRACE
;}
"." {return PSI_T_DOT;}
"=" {return PSI_T_EQUALS;}
"$" {return PSI_T_DOLLAR;}
"." {return PSI_T_DOT;}
"=" {return PSI_T_EQUALS;}
"$" {return PSI_T_DOLLAR;}
@@
-190,9
+202,17
@@
token_t PSI_LexerScan(PSI_Lexer *L)
DOUBLE {return PSI_T_DOUBLE;}
SINT8 {return PSI_T_SINT8;}
UINT8 {return PSI_T_UINT8;}
DOUBLE {return PSI_T_DOUBLE;}
SINT8 {return PSI_T_SINT8;}
UINT8 {return PSI_T_UINT8;}
+ SINT16 {return PSI_T_SINT16;}
+ UINT16 {return PSI_T_UINT16;}
+ SINT32 {return PSI_T_SINT32;}
+ UINT32 {return PSI_T_UINT32;}
+ SINT64 {return PSI_T_SINT64;}
+ UINT64 {return PSI_T_UINT64;}
STRING {return PSI_T_STRING;}
ARRAY {return PSI_T_ARRAY;}
FUNCTION {return PSI_T_FUNCTION;}
STRING {return PSI_T_STRING;}
ARRAY {return PSI_T_ARRAY;}
FUNCTION {return PSI_T_FUNCTION;}
+ TYPEDEF {return PSI_T_TYPEDEF;}
+ LIB {return PSI_T_LIB;}
LET {return PSI_T_LET;}
SET {return PSI_T_SET;}
RET {return PSI_T_RET;}
LET {return PSI_T_LET;}
SET {return PSI_T_SET;}
RET {return PSI_T_RET;}
@@
-205,8
+225,9
@@
token_t PSI_LexerScan(PSI_Lexer *L)
TO_FLOAT {return PSI_T_TO_FLOAT;}
TO_BOOL {return PSI_T_TO_BOOL;}
[0-9] {return PSI_T_DIGIT;}
TO_FLOAT {return PSI_T_TO_FLOAT;}
TO_BOOL {return PSI_T_TO_BOOL;}
[0-9] {return PSI_T_DIGIT;}
- NSNAME {return PSI_T_NSNAME;}
NAME {return PSI_T_NAME;}
NAME {return PSI_T_NAME;}
+ NSNAME {return PSI_T_NSNAME;}
+ QUOTED_STRING {return PSI_T_QUOTED_STRING;}
*/
}
return -1;
*/
}
return -1;