diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-11-20 20:29:56 +0000 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-11-20 20:29:56 +0000 |
commit | e709f23f29d7135a71923921db6eb059826955cf (patch) | |
tree | 543be5ac0ff6b3be5e7bab6bf81aad011ce12a33 | |
parent | 841e93e4bc21729853e56b6d6b188d7b21450950 (diff) | |
download | nsgenbind-e709f23f29d7135a71923921db6eb059826955cf.tar.gz nsgenbind-e709f23f29d7135a71923921db6eb059826955cf.tar.bz2 |
generate unshared type property bodies
-rw-r--r-- | src/jsapi-libdom-property.c | 63 | ||||
-rw-r--r-- | src/jsapi-libdom.c | 2 | ||||
-rw-r--r-- | src/jsapi-libdom.h | 2 |
3 files changed, 60 insertions, 7 deletions
diff --git a/src/jsapi-libdom-property.c b/src/jsapi-libdom-property.c index a488058..4f30011 100644 --- a/src/jsapi-libdom-property.c +++ b/src/jsapi-libdom-property.c @@ -17,6 +17,9 @@ #include "webidl-ast.h" #include "jsapi-libdom.h" +static int generate_property_spec(struct binding *binding, const char *interface); +static int generate_property_body(struct binding *binding, const char *interface); + static int webidl_property_spec_cb(struct webidl_node *node, void *ctx) { @@ -93,7 +96,7 @@ static int webidl_property_spec_cb(struct webidl_node *node, void *ctx) return 0; } -static int generate_property_spec(struct binding *binding, const char *interface); + /* callback to emit implements property spec */ static int webidl_property_spec_implements_cb(struct webidl_node *node, void *ctx) { @@ -583,11 +586,13 @@ static int webidl_implements_cb(struct webidl_node *node, void *ctx) { struct binding *binding = ctx; - return output_property_body(binding, webidl_node_gettext(node)); + return generate_property_body(binding, webidl_node_gettext(node)); } -int -output_property_body(struct binding *binding, const char *interface) + + +static int +generate_property_body(struct binding *binding, const char *interface) { struct webidl_node *interface_node; struct webidl_node *members_node; @@ -633,7 +638,7 @@ output_property_body(struct binding *binding, const char *interface) WEBIDL_NODE_TYPE_INTERFACE_INHERITANCE); if (inherit_node != NULL) { - res = output_property_body(binding, + res = generate_property_body(binding, webidl_node_gettext(inherit_node)); } @@ -646,3 +651,51 @@ output_property_body(struct binding *binding, const char *interface) return res; } + + + +int unshared_property_cb(struct genbind_node *node, void *ctx) +{ + struct binding *binding = ctx; + struct genbind_node *type_node; + + /* only need to generate property body for unshared types */ + type_node = genbind_node_find_type(genbind_node_getnode(node), + NULL, + GENBIND_NODE_TYPE_TYPE); + + fprintf(binding->outfile, + "static JSBool JSAPI_PROPERTYSET(%s, JSContext *cx, JSObject *obj, jsval *vp)\n", + genbind_node_gettext(type_node)); + + fprintf(binding->outfile, + "{\n" + " return JS_FALSE;\n" + "}\n\n"); + + fprintf(binding->outfile, + "static JSBool JSAPI_PROPERTYGET(%s, JSContext *cx, JSObject *obj, jsval *vp)\n" + "{\n", + genbind_node_gettext(type_node)); + + + return 0; +} + +/* exported interface documented in jsapi-libdom.h */ +int +output_property_body(struct binding *binding) +{ + int res; + + res = generate_property_body(binding, binding->interface); + + if (res == 0) { + res = genbind_node_for_each_type(binding->binding_list, + GENBIND_NODE_TYPE_BINDING_UNSHARED, + unshared_property_cb, + binding); + } + + return res; +} diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c index e83d0ee..0ac16e8 100644 --- a/src/jsapi-libdom.c +++ b/src/jsapi-libdom.c @@ -724,7 +724,7 @@ int jsapi_libdom_output(char *outfilename, struct genbind_node *genbind_ast) return 9; } - res = output_property_body(binding, binding->interface); + res = output_property_body(binding); if (res) { return 10; } diff --git a/src/jsapi-libdom.h b/src/jsapi-libdom.h index b397e67..86214f4 100644 --- a/src/jsapi-libdom.h +++ b/src/jsapi-libdom.h @@ -49,7 +49,7 @@ int output_operator_body(struct binding *binding, const char *interface); int output_function_spec(struct binding *binding); int output_property_spec(struct binding *binding); -int output_property_body(struct binding *binding, const char *interface); +int output_property_body(struct binding *binding); int output_const_defines(struct binding *binding, const char *interface); |