summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-10-04 19:48:32 +0100
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-10-04 19:48:32 +0100
commitfbd184fe421591851e1224518a3c9430dd37dce8 (patch)
tree583578eb6d9f6aec338605ca4afd5a691051e4fc /src
parent56c66282650a7a5ac83e549d11839d26deaa1528 (diff)
downloadnsgenbind-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.c5
-rw-r--r--src/genjsbind-ast.h2
-rw-r--r--src/genjsbind-lexer.l10
-rw-r--r--src/genjsbind-parser.y21
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,