summaryrefslogtreecommitdiff
path: root/src/webidl-parser.y
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-09-25 18:51:04 +0100
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-09-25 18:51:04 +0100
commit74ea37fbd83a0d381ae928c7f7e30d0ded875cc0 (patch)
treea76ebefbf29a11c1e4620567b1dd7cadc0765a5e /src/webidl-parser.y
parent4b043613d1a20980b13a6e9b0c8a7ff91c035b2f (diff)
downloadnsgenbind-74ea37fbd83a0d381ae928c7f7e30d0ded875cc0.tar.gz
nsgenbind-74ea37fbd83a0d381ae928c7f7e30d0ded875cc0.tar.bz2
put return type in argument list so we can have multiple prototypes per operation (method)
Diffstat (limited to 'src/webidl-parser.y')
-rw-r--r--src/webidl-parser.y53
1 files changed, 29 insertions, 24 deletions
diff --git a/src/webidl-parser.y b/src/webidl-parser.y
index 69fbef5..fef57dd 100644
--- a/src/webidl-parser.y
+++ b/src/webidl-parser.y
@@ -168,8 +168,8 @@ webidl_error(YYLTYPE *locp, struct webidl_node **winbind_ast, const char *str)
/* default rule to add built AST to passed in one */
Input:
Definitions
- {
- *webidl_ast = webidl_node_prepend(*webidl_ast, $1);
+ {
+ *webidl_ast = webidl_node_prepend(*webidl_ast, $1);
}
|
error
@@ -235,8 +235,8 @@ Interface:
/* extend interface with additional members */
struct webidl_node *interface_node;
interface_node = webidl_node_find_type_ident(*webidl_ast,
- WEBIDL_NODE_TYPE_INTERFACE,
- $2);
+ WEBIDL_NODE_TYPE_INTERFACE,
+ $2);
if (interface_node == NULL) {
struct webidl_node *members;
struct webidl_node *ident;
@@ -246,7 +246,7 @@ Interface:
inheritance = webidl_node_new(WEBIDL_NODE_TYPE_INTERFACE_INHERITANCE, NULL, $3);
}
- members = webidl_node_new(WEBIDL_NODE_TYPE_INTERFACE_MEMBERS, inheritance, $5);
+ members = webidl_node_new(WEBIDL_NODE_TYPE_LIST, inheritance, $5);
ident = webidl_node_new(WEBIDL_NODE_TYPE_IDENT, members, $2);
@@ -259,13 +259,13 @@ Interface:
inheritance = webidl_node_new(WEBIDL_NODE_TYPE_INTERFACE_INHERITANCE, inheritance, $3);
}
- members = webidl_node_new(WEBIDL_NODE_TYPE_INTERFACE_MEMBERS,
+ members = webidl_node_new(WEBIDL_NODE_TYPE_LIST,
inheritance,
$5);
/* link member node into interfaces_node */
- webidl_node_set(interface_node,
- WEBIDL_NODE_TYPE_INTERFACE,
+ webidl_node_set(interface_node,
+ WEBIDL_NODE_TYPE_INTERFACE,
members);
$$ = NULL; /* updated existing interface do not add it again */
}
@@ -294,14 +294,14 @@ PartialInterface:
/* extend interface with additional members */
struct webidl_node *interface_node;
interface_node = webidl_node_find_type_ident(*webidl_ast,
- WEBIDL_NODE_TYPE_INTERFACE,
- $2);
+ WEBIDL_NODE_TYPE_INTERFACE,
+ $2);
if (interface_node == NULL) {
/* doesnt already exist so create it */
struct webidl_node *members;
struct webidl_node *ident;
- members = webidl_node_new(WEBIDL_NODE_TYPE_INTERFACE_MEMBERS, NULL, $4);
+ members = webidl_node_new(WEBIDL_NODE_TYPE_LIST, NULL, $4);
ident = webidl_node_new(WEBIDL_NODE_TYPE_IDENT, members, $2);
@@ -309,13 +309,13 @@ PartialInterface:
} else {
struct webidl_node *members;
- members = webidl_node_new(WEBIDL_NODE_TYPE_INTERFACE_MEMBERS,
+ members = webidl_node_new(WEBIDL_NODE_TYPE_LIST,
webidl_node_getnode(interface_node),
$4);
/* link member node into interfaces_node */
- webidl_node_set(interface_node,
- WEBIDL_NODE_TYPE_INTERFACE,
+ webidl_node_set(interface_node,
+ WEBIDL_NODE_TYPE_INTERFACE,
members);
$$ = NULL; /* updated existing interface do not add it again */
@@ -580,9 +580,14 @@ Special:
OperationRest:
ReturnType OptionalIdentifier '(' ArgumentList ')' ';'
{
- struct webidl_node *operation = $4; /* argument list */
+ struct webidl_node *operation;
+ struct webidl_node *arglist;
+
+ /* put return type in argument list */
+ arglist = webidl_node_prepend($4, $1);
- operation = webidl_node_prepend(operation, $1); /* return type */
+ /* argument list */
+ operation = webidl_node_new(WEBIDL_NODE_TYPE_LIST, NULL, arglist);
operation = webidl_node_prepend(operation, $2); /* identifier */
@@ -605,7 +610,7 @@ OptionalIdentifier:
/* [41] an empty list or a list of non empty comma separated arguments, note
- * this is right associative so the tree build is ass backwards
+ * this is right associative so the tree build is ass backwards
*/
ArgumentList:
/* empty */
@@ -922,7 +927,7 @@ OtherOrComma:
Type:
SingleType
{
- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE, NULL, $1);
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE, NULL, $1);
}
|
UnionType TypeSuffix
@@ -1031,8 +1036,8 @@ PrimitiveType:
UnrestrictedFloatType:
TOK_UNRESTRICTED FloatType
{
- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_MODIFIER,
- $2,
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_MODIFIER,
+ $2,
(void *)WEBIDL_TYPE_MODIFIER_UNRESTRICTED);
}
|
@@ -1056,8 +1061,8 @@ FloatType:
UnsignedIntegerType:
TOK_UNSIGNED IntegerType
{
- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_MODIFIER,
- $2,
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_MODIFIER,
+ $2,
(void *)WEBIDL_TYPE_MODIFIER_UNSIGNED);
}
|
@@ -1086,7 +1091,7 @@ OptionalLong:
/* empty */
{
$$ = false;
- }
+ }
|
TOK_LONG
{
@@ -1125,7 +1130,7 @@ ReturnType:
{
struct webidl_node *type;
type = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_VOID);
- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE, NULL, type);
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE, NULL, type);
}
;