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, 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;
+ }
+ ;
+
%%