summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jsapi-libdom.c12
-rw-r--r--src/webidl-ast.c6
-rw-r--r--src/webidl-ast.h2
-rw-r--r--src/webidl-parser.y53
4 files changed, 39 insertions, 34 deletions
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c
index 13af77b..00b56a9 100644
--- a/src/jsapi-libdom.c
+++ b/src/jsapi-libdom.c
@@ -153,7 +153,7 @@ generate_property_spec(FILE *outfile,
members_node = webidl_node_find(webidl_node_getnode(interface_node),
NULL,
webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS);
+ (void *)WEBIDL_NODE_TYPE_LIST);
while (members_node != NULL) {
@@ -170,7 +170,7 @@ generate_property_spec(FILE *outfile,
members_node = webidl_node_find(webidl_node_getnode(interface_node),
members_node,
webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS);
+ (void *)WEBIDL_NODE_TYPE_LIST);
}
/* check for inherited nodes and insert them too */
@@ -253,7 +253,7 @@ generate_function_spec(FILE *outfile,
members_node = webidl_node_find(webidl_node_getnode(interface_node),
NULL,
webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS);
+ (void *)WEBIDL_NODE_TYPE_LIST);
while (members_node != NULL) {
fprintf(outfile," /**** %s ****/\n", interface);
@@ -267,7 +267,7 @@ generate_function_spec(FILE *outfile,
members_node = webidl_node_find(webidl_node_getnode(interface_node),
members_node,
webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS);
+ (void *)WEBIDL_NODE_TYPE_LIST);
}
/* check for inherited nodes and insert them too */
@@ -352,7 +352,7 @@ generate_function_body(FILE *outfile,
members_node = webidl_node_find(webidl_node_getnode(interface_node),
NULL,
webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS);
+ (void *)WEBIDL_NODE_TYPE_LIST);
while (members_node != NULL) {
fprintf(outfile,"/**** %s ****/\n", interface);
@@ -366,7 +366,7 @@ generate_function_body(FILE *outfile,
members_node = webidl_node_find(webidl_node_getnode(interface_node),
members_node,
webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS);
+ (void *)WEBIDL_NODE_TYPE_LIST);
}
/* check for inherited nodes and insert them too */
diff --git a/src/webidl-ast.c b/src/webidl-ast.c
index 91da839..a5f2d23 100644
--- a/src/webidl-ast.c
+++ b/src/webidl-ast.c
@@ -195,7 +195,7 @@ struct webidl_node *webidl_node_getnode(struct webidl_node *node)
switch (node->type) {
case WEBIDL_NODE_TYPE_ROOT:
case WEBIDL_NODE_TYPE_INTERFACE:
- case WEBIDL_NODE_TYPE_INTERFACE_MEMBERS:
+ case WEBIDL_NODE_TYPE_LIST:
case WEBIDL_NODE_TYPE_ATTRIBUTE:
case WEBIDL_NODE_TYPE_OPERATION:
case WEBIDL_NODE_TYPE_OPTIONAL_ARGUMENT:
@@ -225,8 +225,8 @@ static const char *webidl_node_type_to_str(enum webidl_node_type type)
case WEBIDL_NODE_TYPE_INTERFACE:
return "Interface";
- case WEBIDL_NODE_TYPE_INTERFACE_MEMBERS:
- return "Members";
+ case WEBIDL_NODE_TYPE_LIST:
+ return "List";
case WEBIDL_NODE_TYPE_ATTRIBUTE:
return "Attribute";
diff --git a/src/webidl-ast.h b/src/webidl-ast.h
index c41149d..ac3586f 100644
--- a/src/webidl-ast.h
+++ b/src/webidl-ast.h
@@ -13,7 +13,7 @@ enum webidl_node_type {
WEBIDL_NODE_TYPE_ROOT = 0,
WEBIDL_NODE_TYPE_IDENT,
WEBIDL_NODE_TYPE_INTERFACE,
- WEBIDL_NODE_TYPE_INTERFACE_MEMBERS,
+ WEBIDL_NODE_TYPE_LIST, /* a list of nodes (interface members, arguments) */
WEBIDL_NODE_TYPE_INTERFACE_INHERITANCE,
WEBIDL_NODE_TYPE_ATTRIBUTE,
WEBIDL_NODE_TYPE_OPERATION,
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);
}
;