diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-09-20 20:28:49 +0100 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-09-20 20:28:49 +0100 |
commit | d58d0289a7b7817e2d96f4666ebb370add8d1a81 (patch) | |
tree | e00f33e3044e2254ec8c35aa0d2e2be6123b7fac /src/jsapi-libdom.c | |
parent | 2133ce26a2ec07fb37a5f4cc6cab5326fdf49546 (diff) | |
download | nsgenbind-d58d0289a7b7817e2d96f4666ebb370add8d1a81.tar.gz nsgenbind-d58d0289a7b7817e2d96f4666ebb370add8d1a81.tar.bz2 |
cope with partial interfaces
Diffstat (limited to 'src/jsapi-libdom.c')
-rw-r--r-- | src/jsapi-libdom.c | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c index 54c548c..aba6bdf 100644 --- a/src/jsapi-libdom.c +++ b/src/jsapi-libdom.c @@ -122,7 +122,7 @@ static int webidl_property_spec_cb(struct webidl_node *node, void *ctx) return 1; } else { fprintf(outfile, - " JSAPI_PS(%s, 0, JSPROP_ENUMERATE | JSPROP_SHARED),\n", + " JSAPI_PS(%s, 0, JSPROP_ENUMERATE | JSPROP_SHARED),\n", webidl_node_gettext(ident_node)); } return 0; @@ -137,6 +137,7 @@ generate_property_spec(FILE *outfile, struct webidl_node *members_node; struct webidl_node *inherit_node; + /* find interface in webidl with correct ident attached */ interface_node = webidl_node_find_type_ident(webidl_ast, WEBIDL_NODE_TYPE_INTERFACE, @@ -153,21 +154,25 @@ generate_property_spec(FILE *outfile, NULL, webidl_cmp_node_type, (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS); - if (members_node == NULL) { - fprintf(stderr, - "Unable to find members within interface %s\n", - interface); - return -1; - } + while (members_node != NULL) { + + fprintf(outfile," /**** %s ****/\n", interface); + + + /* for each function emit a JSAPI_FS()*/ + webidl_node_for_each_type(webidl_node_getnode(members_node), + WEBIDL_NODE_TYPE_ATTRIBUTE, + webidl_property_spec_cb, + outfile); - /* for each function emit a JSAPI_FS()*/ - webidl_node_for_each_type(webidl_node_getnode(members_node), - WEBIDL_NODE_TYPE_ATTRIBUTE, - webidl_property_spec_cb, - outfile); + members_node = webidl_node_find(webidl_node_getnode(interface_node), + members_node, + webidl_cmp_node_type, + (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS); + } /* check for inherited nodes and insert them too */ inherit_node = webidl_node_find(webidl_node_getnode(interface_node), NULL, @@ -195,7 +200,7 @@ output_property_spec(FILE *outfile, res = generate_property_spec(outfile, binding->interface, webidl_ast); - fprintf(outfile, " JSAPI_PS_END\n};\n"); + fprintf(outfile, " JSAPI_PS_END\n};\n"); return res; } @@ -217,7 +222,7 @@ static int webidl_func_spec_cb(struct webidl_node *node, void *ctx) */ } else { fprintf(outfile, - " JSAPI_FS(%s, 0, 0),\n", + " JSAPI_FS(%s, 0, 0),\n", webidl_node_gettext(ident_node)); } return 0; @@ -232,6 +237,7 @@ generate_function_spec(FILE *outfile, struct webidl_node *members_node; struct webidl_node *inherit_node; + /* find interface in webidl with correct ident attached */ interface_node = webidl_node_find_type_ident(webidl_ast, WEBIDL_NODE_TYPE_INTERFACE, @@ -248,20 +254,21 @@ generate_function_spec(FILE *outfile, NULL, webidl_cmp_node_type, (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS); - if (members_node == NULL) { - fprintf(stderr, - "Unable to find members within interface %s\n", - interface); - return -1; - } + while (members_node != NULL) { + fprintf(outfile," /**** %s ****/\n", interface); - /* for each function emit a JSAPI_FS()*/ - webidl_node_for_each_type(webidl_node_getnode(members_node), - WEBIDL_NODE_TYPE_OPERATION, - webidl_func_spec_cb, - outfile); + /* for each function emit a JSAPI_FS()*/ + webidl_node_for_each_type(webidl_node_getnode(members_node), + WEBIDL_NODE_TYPE_OPERATION, + webidl_func_spec_cb, + outfile); + members_node = webidl_node_find(webidl_node_getnode(interface_node), + members_node, + webidl_cmp_node_type, + (void *)WEBIDL_NODE_TYPE_INTERFACE_MEMBERS); + } /* check for inherited nodes and insert them too */ inherit_node = webidl_node_find(webidl_node_getnode(interface_node), |