diff options
author | Vincent Sanders <vince@kyllikki.org> | 2013-12-16 00:08:27 +0000 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2014-05-16 14:38:56 +0100 |
commit | abec5defbb553588dce1c317b74570061705f6d0 (patch) | |
tree | a88c2e25cf45358355219a6f832d227cebeffe9e /src/nsgenbind-parser.y | |
parent | 5755930ae93b6305b40620fff0e90bc2e4c64b46 (diff) | |
download | nsgenbind-abec5defbb553588dce1c317b74570061705f6d0.tar.gz nsgenbind-abec5defbb553588dce1c317b74570061705f6d0.tar.bz2 |
add flags to interface within binding
Diffstat (limited to 'src/nsgenbind-parser.y')
-rw-r--r-- | src/nsgenbind-parser.y | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/src/nsgenbind-parser.y b/src/nsgenbind-parser.y index b9ec23b..b37ab9d 100644 --- a/src/nsgenbind-parser.y +++ b/src/nsgenbind-parser.y @@ -54,6 +54,7 @@ char *errtxt; %token TOK_GETTER %token TOK_SETTER %token TOK_INTERFACE +%token TOK_FLAGS %token TOK_TYPE %token TOK_PRIVATE %token TOK_INTERNAL @@ -84,6 +85,9 @@ char *errtxt; %type <node> Private %type <node> Internal %type <node> Interface +%type <node> InterfaceArgs +%type <node> InterfaceArg +%type <node> InterfaceFlags %type <node> Property %type <node> Operation %type <node> Api @@ -91,6 +95,7 @@ char *errtxt; %type <node> Setter + %% Input @@ -260,7 +265,7 @@ Setter Binding : - TOK_BINDING TOK_IDENTIFIER '{' BindingArgs '}' + TOK_BINDING TOK_IDENTIFIER '{' BindingArgs '}' { $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING, NULL, @@ -313,7 +318,52 @@ Interface : TOK_INTERFACE TOK_IDENTIFIER ';' { - $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_INTERFACE, NULL, $2); + $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_INTERFACE, NULL, + genbind_new_node(GENBIND_NODE_TYPE_IDENT, NULL, $2)); + } + | + TOK_INTERFACE TOK_IDENTIFIER '{' '}' + { + $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_INTERFACE, NULL, + genbind_new_node(GENBIND_NODE_TYPE_IDENT, NULL, $2)); + } + | + TOK_INTERFACE TOK_IDENTIFIER '{' InterfaceArgs '}' + { + $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_INTERFACE, + NULL, + genbind_new_node(GENBIND_NODE_TYPE_IDENT, $4, $2)); + } + ; + +InterfaceArgs + : + InterfaceArg + | + InterfaceArgs InterfaceArg + { + $$ = genbind_node_link($2, $1); + } + ; + +InterfaceArg + : + TOK_FLAGS InterfaceFlags ';' + { + $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING_INTERFACE_FLAGS, NULL, $2); + } + ; + +InterfaceFlags + : + TOK_IDENTIFIER + { + $$ = genbind_new_node(GENBIND_NODE_TYPE_IDENT, NULL, $1); + } + | + InterfaceFlags ',' TOK_IDENTIFIER + { + $$ = genbind_new_node(GENBIND_NODE_TYPE_IDENT, $1, $3); } ; |