diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-10-04 19:48:32 +0100 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-10-04 19:48:32 +0100 |
commit | fbd184fe421591851e1224518a3c9430dd37dce8 (patch) | |
tree | 583578eb6d9f6aec338605ca4afd5a691051e4fc /src | |
parent | 56c66282650a7a5ac83e549d11839d26deaa1528 (diff) | |
download | nsgenbind-fbd184fe421591851e1224518a3c9430dd37dce8.tar.gz nsgenbind-fbd184fe421591851e1224518a3c9430dd37dce8.tar.bz2 |
allow teh binding to specify contents for operations
Diffstat (limited to 'src')
-rw-r--r-- | src/genjsbind-ast.c | 5 | ||||
-rw-r--r-- | src/genjsbind-ast.h | 2 | ||||
-rw-r--r-- | src/genjsbind-lexer.l | 10 | ||||
-rw-r--r-- | src/genjsbind-parser.y | 21 |
4 files changed, 32 insertions, 6 deletions
diff --git a/src/genjsbind-ast.c b/src/genjsbind-ast.c index bcba958..2927eab 100644 --- a/src/genjsbind-ast.c +++ b/src/genjsbind-ast.c @@ -132,6 +132,7 @@ char *genbind_node_gettext(struct genbind_node *node) case GENBIND_NODE_TYPE_IDENT: case GENBIND_NODE_TYPE_BINDING_TYPE: case GENBIND_NODE_TYPE_BINDING_INTERFACE: + case GENBIND_NODE_TYPE_CBLOCK: return node->r.text; default: @@ -145,6 +146,7 @@ struct genbind_node *genbind_node_getnode(struct genbind_node *node) case GENBIND_NODE_TYPE_HDRCOMMENT: case GENBIND_NODE_TYPE_BINDING: case GENBIND_NODE_TYPE_BINDING_PRIVATE: + case GENBIND_NODE_TYPE_OPERATION: return node->r.node; default: @@ -185,6 +187,9 @@ static const char *genbind_node_type_to_str(enum genbind_node_type type) case GENBIND_NODE_TYPE_BINDING_INTERFACE: return "Interface"; + case GENBIND_NODE_TYPE_OPERATION: + return "Operation"; + default: return "Unknown"; } diff --git a/src/genjsbind-ast.h b/src/genjsbind-ast.h index 6256414..0772169 100644 --- a/src/genjsbind-ast.h +++ b/src/genjsbind-ast.h @@ -12,6 +12,7 @@ enum genbind_node_type { GENBIND_NODE_TYPE_ROOT = 0, GENBIND_NODE_TYPE_IDENT, + GENBIND_NODE_TYPE_CBLOCK, GENBIND_NODE_TYPE_WEBIDLFILE, GENBIND_NODE_TYPE_HDRCOMMENT, GENBIND_NODE_TYPE_STRING, @@ -20,6 +21,7 @@ enum genbind_node_type { GENBIND_NODE_TYPE_BINDING_TYPE, GENBIND_NODE_TYPE_BINDING_PRIVATE, GENBIND_NODE_TYPE_BINDING_INTERFACE, + GENBIND_NODE_TYPE_OPERATION, }; diff --git a/src/genjsbind-lexer.l b/src/genjsbind-lexer.l index dcd47d5..2282c5e 100644 --- a/src/genjsbind-lexer.l +++ b/src/genjsbind-lexer.l @@ -56,9 +56,9 @@ identifier [A-Z_a-z][0-9A-Z_a-z]* other [^\t\n\r 0-9A-Z_a-z] -cblockopen \[\[\[ +cblockopen \%\{ -cblockclose \]\]\] +cblockclose \%\} %x cblock @@ -88,6 +88,8 @@ type return TOK_TYPE; private return TOK_PRIVATE; +operation return TOK_OPERATION; + {cblockopen} BEGIN(cblock); {identifier} { @@ -106,8 +108,8 @@ private return TOK_PRIVATE; . /* nothing */ -<cblock>[^\]]* yylval->text = strdup(yytext); return TOK_CCODE_LITERAL; +<cblock>[^\%]* yylval->text = strdup(yytext); return TOK_CCODE_LITERAL; <cblock>{cblockclose} BEGIN(INITIAL); -<cblock>\]+ yylval->text = strdup(yytext); return TOK_CCODE_LITERAL; +<cblock>\% yylval->text = strdup(yytext); return TOK_CCODE_LITERAL; %% diff --git a/src/genjsbind-parser.y b/src/genjsbind-parser.y index 3177c87..0950dc9 100644 --- a/src/genjsbind-parser.y +++ b/src/genjsbind-parser.y @@ -43,6 +43,7 @@ char *errtxt; %token TOK_PREAMBLE %token TOK_BINDING +%token TOK_OPERATION %token TOK_INTERFACE %token TOK_TYPE %token TOK_PRIVATE @@ -65,6 +66,7 @@ char *errtxt; %type <node> Type %type <node> Private %type <node> Interface +%type <node> Operation %% @@ -103,6 +105,8 @@ Statement Preamble | Binding + | + Operation ; /* [3] load a web IDL file */ @@ -137,7 +141,7 @@ Strings Preamble : - TOK_PREAMBLE CBlock ';' + TOK_PREAMBLE CBlock { $$ = genbind_new_node(GENBIND_NODE_TYPE_PREAMBLE, NULL, $2); } @@ -153,9 +157,22 @@ CBlock } ; +Operation + : + TOK_OPERATION TOK_IDENTIFIER CBlock + { + $$ = genbind_new_node(GENBIND_NODE_TYPE_OPERATION, + NULL, + genbind_new_node(GENBIND_NODE_TYPE_IDENT, + genbind_new_node(GENBIND_NODE_TYPE_CBLOCK, + NULL, + $3), + $2)); + } + Binding : - TOK_BINDING TOK_IDENTIFIER '{' BindingArgs '}' ';' + TOK_BINDING TOK_IDENTIFIER '{' BindingArgs '}' { $$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING, NULL, |