summaryrefslogtreecommitdiff
path: root/src/jsapi-libdom.c
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-20 18:20:28 +0000
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-20 18:20:28 +0000
commitf2578192d04f4bc0ad70abaf070fffd5d1cf63ab (patch)
tree215945080196bd76ca505f112a8a618220b9145a /src/jsapi-libdom.c
parent19f0eb49df62e8094d6c8fcd5f8d7522b07ec3d3 (diff)
downloadnsgenbind-f2578192d04f4bc0ad70abaf070fffd5d1cf63ab.tar.gz
nsgenbind-f2578192d04f4bc0ad70abaf070fffd5d1cf63ab.tar.bz2
keep the binding node list in the state object
Diffstat (limited to 'src/jsapi-libdom.c')
-rw-r--r--src/jsapi-libdom.c50
1 files changed, 18 insertions, 32 deletions
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c
index fb8080f..e83d0ee 100644
--- a/src/jsapi-libdom.c
+++ b/src/jsapi-libdom.c
@@ -292,19 +292,8 @@ static int
output_class_new(struct binding *binding)
{
int res = 0;
- struct genbind_node *binding_node;
struct genbind_node *api_node;
- binding_node = genbind_node_find(binding->gb_ast,
- NULL,
- genbind_cmp_node_type,
- (void *)GENBIND_NODE_TYPE_BINDING);
-
- if (binding_node == NULL) {
- return -1;
- }
-
-
/* constructor */
fprintf(binding->outfile,
"JSObject *jsapi_new_%s(JSContext *cx,\n"
@@ -312,7 +301,7 @@ output_class_new(struct binding *binding)
"\t\tJSObject *parent",
binding->interface);
- genbind_node_for_each_type(genbind_node_getnode(binding_node),
+ genbind_node_for_each_type(binding->binding_list,
GENBIND_NODE_TYPE_BINDING_PRIVATE,
webidl_private_param_cb,
binding);
@@ -332,7 +321,7 @@ output_class_new(struct binding *binding)
"\t\treturn NULL;\n"
"\t}\n");
- genbind_node_for_each_type(genbind_node_getnode(binding_node),
+ genbind_node_for_each_type(binding->binding_list,
GENBIND_NODE_TYPE_BINDING_PRIVATE,
webidl_private_assign_cb,
binding);
@@ -517,23 +506,13 @@ output_jsclass(struct binding *binding)
static int
output_private_declaration(struct binding *binding)
{
- struct genbind_node *binding_node;
struct genbind_node *type_node;
if (!binding->has_private) {
return 0;
}
- binding_node = genbind_node_find(binding->gb_ast,
- NULL,
- genbind_cmp_node_type,
- (void *)GENBIND_NODE_TYPE_BINDING);
-
- if (binding_node == NULL) {
- return -1;
- }
-
- type_node = genbind_node_find(genbind_node_getnode(binding_node),
+ type_node = genbind_node_find(binding->binding_list,
NULL,
genbind_cmp_node_type,
(void *)GENBIND_NODE_TYPE_TYPE);
@@ -544,12 +523,12 @@ output_private_declaration(struct binding *binding)
fprintf(binding->outfile, "struct jsclass_private {\n");
- genbind_node_for_each_type(genbind_node_getnode(binding_node),
+ genbind_node_for_each_type(binding->binding_list,
GENBIND_NODE_TYPE_BINDING_PRIVATE,
webidl_private_cb,
binding);
- genbind_node_for_each_type(genbind_node_getnode(binding_node),
+ genbind_node_for_each_type(binding->binding_list,
GENBIND_NODE_TYPE_BINDING_INTERNAL,
webidl_private_cb,
binding);
@@ -588,11 +567,11 @@ output_header_comments(struct binding *binding)
}
static bool
-binding_has_private(struct genbind_node *binding_node)
+binding_has_private(struct genbind_node *binding_list)
{
struct genbind_node *node;
- node = genbind_node_find_type(genbind_node_getnode(binding_node),
+ node = genbind_node_find_type(binding_list,
NULL,
GENBIND_NODE_TYPE_BINDING_PRIVATE);
@@ -600,7 +579,7 @@ binding_has_private(struct genbind_node *binding_node)
return true;
}
- node = genbind_node_find_type(genbind_node_getnode(binding_node),
+ node = genbind_node_find_type(binding_list,
NULL,
GENBIND_NODE_TYPE_BINDING_INTERNAL);
if (node != NULL) {
@@ -629,6 +608,7 @@ binding_new(char *outfilename, struct genbind_node *genbind_ast)
{
struct binding *nb;
struct genbind_node *binding_node;
+ struct genbind_node *binding_list;
struct genbind_node *ident_node;
struct genbind_node *interface_node;
FILE *outfile ; /* output file */
@@ -642,14 +622,19 @@ binding_new(char *outfilename, struct genbind_node *genbind_ast)
return NULL;
}
- ident_node = genbind_node_find_type(genbind_node_getnode(binding_node),
+ binding_list = genbind_node_getnode(binding_node);
+ if (binding_list == NULL) {
+ return NULL;
+ }
+
+ ident_node = genbind_node_find_type(binding_list,
NULL,
GENBIND_NODE_TYPE_IDENT);
if (ident_node == NULL) {
return NULL;
}
- interface_node = genbind_node_find_type(genbind_node_getnode(binding_node),
+ interface_node = genbind_node_find_type(binding_list,
NULL,
GENBIND_NODE_TYPE_BINDING_INTERFACE);
if (interface_node == NULL) {
@@ -683,8 +668,9 @@ binding_new(char *outfilename, struct genbind_node *genbind_ast)
nb->name = genbind_node_gettext(ident_node);
nb->interface = genbind_node_gettext(interface_node);
nb->outfile = outfile;
- nb->has_private = binding_has_private(binding_node);
+ nb->has_private = binding_has_private(binding_list);
nb->has_global = binding_has_global(nb);
+ nb->binding_list = binding_list;
nb->resolve = genbind_node_find_type_ident(genbind_ast,
NULL,
GENBIND_NODE_TYPE_API,