summaryrefslogtreecommitdiff
path: root/src/nsgenbind-parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/nsgenbind-parser.y')
-rw-r--r--src/nsgenbind-parser.y54
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);
}
;