summaryrefslogtreecommitdiff
path: root/src/jsapi-libdom.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jsapi-libdom.c')
-rw-r--r--src/jsapi-libdom.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c
index 187d511..0711e75 100644
--- a/src/jsapi-libdom.c
+++ b/src/jsapi-libdom.c
@@ -272,8 +272,8 @@ output_class_init(struct binding *binding)
"\t\t&JSClass_%s,\n"
"\t\tNULL,\n"
"\t\t0,\n"
- "\t\tjsclass_properties,\n"
- "\t\tjsclass_functions, \n"
+ "\t\tNULL,\n"
+ "\t\tNULL, \n"
"\t\tNULL, \n"
"\t\tNULL);\n",
binding->interface);
@@ -322,6 +322,7 @@ output_class_new(struct binding *binding)
"{\n"
"\tJSObject *newobject;\n");
+ /* create private data */
if (binding->has_private) {
fprintf(binding->outfile,
"\tstruct jsclass_private *private;\n"
@@ -362,8 +363,38 @@ output_class_new(struct binding *binding)
"\tif (JS_SetPrivate(cx, newobject, private) != JS_TRUE) {\n"
"\t\tfree(private);\n"
"\t\treturn NULL;\n"
+ "\t}\n\n");
+
+ /* attach operations and attributes (functions and properties) */
+ fprintf(binding->outfile,
+ "\tif (JS_DefineFunctions(cx, newobject, jsclass_functions) != JS_TRUE) {\n"
+ "\t\tfree(private);\n"
+ "\t\treturn NULL;\n"
+ "\t}\n\n");
+
+ fprintf(binding->outfile,
+ "\tif (JS_DefineProperties(cx, newobject, jsclass_properties) != JS_TRUE) {\n"
+ "\t\tfree(private);\n"
+ "\t\treturn NULL;\n"
+ "\t}\n\n");
+ } else {
+ fprintf(binding->outfile,
+ "\tif (newobject == NULL) {\n"
+ "\t\treturn NULL;\n"
"\t}\n");
+
+ /* attach operations and attributes (functions and properties) */
+ fprintf(binding->outfile,
+ "\tif (JS_DefineFunctions(cx, newobject, jsclass_functions) != JS_TRUE) {\n"
+ "\t\treturn NULL;\n"
+ "\t}\n\n");
+
+ fprintf(binding->outfile,
+ "\tif (JS_DefineProperties(cx, newobject, jsclass_properties) != JS_TRUE) {\n"
+ "\t\treturn NULL;\n"
+ "\t}\n\n");
}
+
fprintf(binding->outfile,
"\n"