diff options
Diffstat (limited to 'src/nsgenbind-parser.y')
-rw-r--r-- | src/nsgenbind-parser.y | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/src/nsgenbind-parser.y b/src/nsgenbind-parser.y index 6364bf7..b104f2f 100644 --- a/src/nsgenbind-parser.y +++ b/src/nsgenbind-parser.y @@ -34,8 +34,9 @@ char *errtxt; %union { - char* text; - struct genbind_node *node; + char* text; + struct genbind_node *node; + int number; } %token TOK_IDLFILE @@ -52,6 +53,7 @@ char *errtxt; %token TOK_PRIVATE %token TOK_INTERNAL %token TOK_UNSHARED +%token TOK_SHARED %token <text> TOK_IDENTIFIER %token <text> TOK_STRING_LITERAL @@ -59,6 +61,9 @@ char *errtxt; %type <text> CBlock +%type <number> Modifiers +%type <number> Modifier + %type <node> Statement %type <node> Statements %type <node> IdlFile @@ -72,12 +77,13 @@ char *errtxt; %type <node> Private %type <node> Internal %type <node> Interface -%type <node> Unshared +%type <node> Shared %type <node> Operation %type <node> Api %type <node> Getter %type <node> Setter + %% Input @@ -255,7 +261,7 @@ BindingArg | Interface | - Unshared + Shared ; Type @@ -294,18 +300,44 @@ Interface } ; -Unshared +Shared : - TOK_UNSHARED TOK_TYPE TOK_IDENTIFIER ';' + TOK_SHARED Modifiers TOK_IDENTIFIER ';' { - $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_UNSHARED, NULL, - genbind_new_node(GENBIND_NODE_TYPE_TYPE, NULL, $3)); + $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_SHARED, + NULL, + genbind_new_node(GENBIND_NODE_TYPE_MODIFIER, + genbind_new_node(GENBIND_NODE_TYPE_IDENT, + NULL, + $3), + (void *)$2)); + } + ; + +Modifiers + : + /* empty */ + { + $$ = 0; } | - TOK_UNSHARED TOK_IDENTIFIER ';' + Modifiers Modifier { - $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_UNSHARED, NULL, - genbind_new_node(GENBIND_NODE_TYPE_IDENT, NULL, $2)); + $$ |= $2; } ; + +Modifier + : + TOK_TYPE + { + $$ = GENBIND_TYPE_TYPE; + } + | + TOK_UNSHARED + { + $$ = GENBIND_TYPE_UNSHARED; + } + ; + %% |