From 93c89193c1f2a29b00741d1494f262642108abe2 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 21 Nov 2012 15:21:42 +0000 Subject: make property shared status and type handling selection generic --- src/nsgenbind-parser.y | 54 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 11 deletions(-) (limited to 'src/nsgenbind-parser.y') 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 TOK_IDENTIFIER %token TOK_STRING_LITERAL @@ -59,6 +61,9 @@ char *errtxt; %type CBlock +%type Modifiers +%type Modifier + %type Statement %type Statements %type IdlFile @@ -72,12 +77,13 @@ char *errtxt; %type Private %type Internal %type Interface -%type Unshared +%type Shared %type Operation %type Api %type Getter %type 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; + } + ; + %% -- cgit v1.2.3