From 6c86695d0c0b01f38bc266b61a46cc38c49824bb Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 21 Nov 2012 10:22:13 +0000 Subject: fix unshared type generation --- src/jsapi-libdom-property.c | 11 +++++++-- src/nsgenbind-ast.c | 59 +++++++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/jsapi-libdom-property.c b/src/jsapi-libdom-property.c index 4f30011..deecc5e 100644 --- a/src/jsapi-libdom-property.c +++ b/src/jsapi-libdom-property.c @@ -663,6 +663,9 @@ int unshared_property_cb(struct genbind_node *node, void *ctx) type_node = genbind_node_find_type(genbind_node_getnode(node), NULL, GENBIND_NODE_TYPE_TYPE); + if (type_node == NULL) { + return 0; + } fprintf(binding->outfile, "static JSBool JSAPI_PROPERTYSET(%s, JSContext *cx, JSObject *obj, jsval *vp)\n", @@ -674,9 +677,13 @@ int unshared_property_cb(struct genbind_node *node, void *ctx) "}\n\n"); fprintf(binding->outfile, - "static JSBool JSAPI_PROPERTYGET(%s, JSContext *cx, JSObject *obj, jsval *vp)\n" - "{\n", + "static JSBool JSAPI_PROPERTYGET(%s, JSContext *cx, JSObject *obj, jsval *vp)\n", genbind_node_gettext(type_node)); + + fprintf(binding->outfile, + "{\n" + " return JS_FALSE;\n" + "}\n\n"); return 0; diff --git a/src/nsgenbind-ast.c b/src/nsgenbind-ast.c index a8a8361..df6c608 100644 --- a/src/nsgenbind-ast.c +++ b/src/nsgenbind-ast.c @@ -197,38 +197,45 @@ int genbind_cmp_node_type(struct genbind_node *node, void *ctx) char *genbind_node_gettext(struct genbind_node *node) { - switch(node->type) { - case GENBIND_NODE_TYPE_WEBIDLFILE: - case GENBIND_NODE_TYPE_STRING: - case GENBIND_NODE_TYPE_PREAMBLE: - case GENBIND_NODE_TYPE_IDENT: - case GENBIND_NODE_TYPE_TYPE: - case GENBIND_NODE_TYPE_BINDING_INTERFACE: - case GENBIND_NODE_TYPE_CBLOCK: - return node->r.text; - - default: - return NULL; + if (node != NULL) { + switch(node->type) { + case GENBIND_NODE_TYPE_WEBIDLFILE: + case GENBIND_NODE_TYPE_STRING: + case GENBIND_NODE_TYPE_PREAMBLE: + case GENBIND_NODE_TYPE_IDENT: + case GENBIND_NODE_TYPE_TYPE: + case GENBIND_NODE_TYPE_BINDING_INTERFACE: + case GENBIND_NODE_TYPE_CBLOCK: + return node->r.text; + + default: + break; + } } + return NULL; } struct genbind_node *genbind_node_getnode(struct genbind_node *node) { - switch(node->type) { - case GENBIND_NODE_TYPE_HDRCOMMENT: - case GENBIND_NODE_TYPE_BINDING: - case GENBIND_NODE_TYPE_BINDING_PRIVATE: - case GENBIND_NODE_TYPE_BINDING_INTERNAL: - case GENBIND_NODE_TYPE_BINDING_UNSHARED: - case GENBIND_NODE_TYPE_OPERATION: - case GENBIND_NODE_TYPE_API: - case GENBIND_NODE_TYPE_GETTER: - case GENBIND_NODE_TYPE_SETTER: - return node->r.node; - - default: - return NULL; + if (node != NULL) { + switch(node->type) { + case GENBIND_NODE_TYPE_HDRCOMMENT: + case GENBIND_NODE_TYPE_BINDING: + case GENBIND_NODE_TYPE_BINDING_PRIVATE: + case GENBIND_NODE_TYPE_BINDING_INTERNAL: + case GENBIND_NODE_TYPE_BINDING_UNSHARED: + case GENBIND_NODE_TYPE_OPERATION: + case GENBIND_NODE_TYPE_API: + case GENBIND_NODE_TYPE_GETTER: + case GENBIND_NODE_TYPE_SETTER: + return node->r.node; + + default: + break; + } } + return NULL; + } static const char *genbind_node_type_to_str(enum genbind_node_type type) -- cgit v1.2.3