static JSObject* CreateInterfacePrototypeObject(JSContext* cx, JSObject* global, JSObject* parentProto, JSClass* protoClass, JSFunctionSpec* methods, JSPropertySpec* properties, ConstantSpec* constants) { JSObject* ourProto = JS_NewObjectWithUniqueType(cx, protoClass, parentProto, global); if (!ourProto) { return NULL; } if (methods && !JS_DefineFunctions(cx, ourProto, methods)) { return NULL; } if (properties && !JS_DefineProperties(cx, ourProto, properties)) { return NULL; } if (constants && !DefineConstants(cx, ourProto, constants)) { return NULL; } return ourProto; }
static JSObject* CreateInterfaceObject(JSContext* cx, JSObject* global, JSObject* receiver, JSClass* constructorClass, JSObject* proto, JSFunctionSpec* staticMethods, ConstantSpec* constants, const char* name) { JSObject* functionProto = JS_GetFunctionPrototype(cx, global); if (!functionProto) { return NULL; } JSObject* constructor = JS_NewObject(cx, constructorClass, functionProto, global); if (!constructor) { return NULL; } if (staticMethods && !JS_DefineFunctions(cx, constructor, staticMethods)) { return NULL; } if (constants && !DefineConstants(cx, constructor, constants)) { return NULL; } if (proto && !JS_LinkConstructorAndPrototype(cx, constructor, proto)) { return NULL; } // This is Enumerable: False per spec. if (!JS_DefineProperty(cx, receiver, name, OBJECT_TO_JSVAL(constructor), NULL, NULL, 0)) { return NULL; } return constructor; }
static inline bool Define(JSContext* cx, JSObject* obj, ConstantSpec* spec) { return DefineConstants(cx, obj, spec); }