summaryrefslogtreecommitdiff
path: root/src/jsapi-libdom-property.c
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-20 20:29:56 +0000
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-20 20:29:56 +0000
commite709f23f29d7135a71923921db6eb059826955cf (patch)
tree543be5ac0ff6b3be5e7bab6bf81aad011ce12a33 /src/jsapi-libdom-property.c
parent841e93e4bc21729853e56b6d6b188d7b21450950 (diff)
downloadnsgenbind-e709f23f29d7135a71923921db6eb059826955cf.tar.gz
nsgenbind-e709f23f29d7135a71923921db6eb059826955cf.tar.bz2
generate unshared type property bodies
Diffstat (limited to 'src/jsapi-libdom-property.c')
-rw-r--r--src/jsapi-libdom-property.c63
1 files changed, 58 insertions, 5 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;
+}