mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Lazily-define standard ECMAScript classes
This commit is contained in:
parent
787c4e568d
commit
2c4d5da866
2 changed files with 11 additions and 9 deletions
|
@ -1768,17 +1768,21 @@ class CGDOMJSClass(CGThing):
|
|||
def define(self):
|
||||
args = {
|
||||
"domClass": DOMClass(self.descriptor),
|
||||
"enumerateHook": "None",
|
||||
"finalizeHook": FINALIZE_HOOK_NAME,
|
||||
"flags": "0",
|
||||
"name": str_to_const_array(self.descriptor.interface.identifier.name),
|
||||
"outerObjectHook": self.descriptor.outerObjectHook,
|
||||
"resolveHook": "None",
|
||||
"slots": "1",
|
||||
"traceHook": TRACE_HOOK_NAME,
|
||||
}
|
||||
if self.descriptor.isGlobal():
|
||||
assert not self.descriptor.weakReferenceable
|
||||
args["enumerateHook"] = "Some(js::jsapi::JS_EnumerateStandardClasses)"
|
||||
args["flags"] = "JSCLASS_IS_GLOBAL | JSCLASS_DOM_GLOBAL"
|
||||
args["slots"] = "JSCLASS_GLOBAL_SLOT_COUNT + 1"
|
||||
args["resolveHook"] = "Some(js::jsapi::JS_ResolveStandardClass)"
|
||||
args["traceHook"] = "js::jsapi::JS_GlobalObjectTraceHook"
|
||||
elif self.descriptor.weakReferenceable:
|
||||
args["slots"] = "2"
|
||||
|
@ -1793,8 +1797,8 @@ static Class: DOMJSClass = DOMJSClass {
|
|||
delProperty: None,
|
||||
getProperty: None,
|
||||
setProperty: None,
|
||||
enumerate: None,
|
||||
resolve: None,
|
||||
enumerate: %(enumerateHook)s,
|
||||
resolve: %(resolveHook)s,
|
||||
convert: None,
|
||||
finalize: Some(%(finalizeHook)s),
|
||||
call: None,
|
||||
|
|
|
@ -23,12 +23,11 @@ use js::glue::{RUST_JSID_TO_INT, UnwrapObject};
|
|||
use js::jsapi::{CallArgs, CompartmentOptions, DOMCallbacks, GetGlobalForObjectCrossCompartment};
|
||||
use js::jsapi::{HandleId, HandleObject, HandleValue, Heap, JSAutoCompartment, JSClass, JSContext};
|
||||
use js::jsapi::{JSJitInfo, JSObject, JSTraceOp, JSTracer, JSVersion, JSWrapObjectCallbacks};
|
||||
use js::jsapi::{JS_DeletePropertyById1, JS_FireOnNewGlobalObject};
|
||||
use js::jsapi::{JS_ForwardGetPropertyTo, JS_GetClass, JS_GetProperty, JS_GetPrototype};
|
||||
use js::jsapi::{JS_GetReservedSlot, JS_HasProperty, JS_HasPropertyById, JS_InitStandardClasses};
|
||||
use js::jsapi::{JS_IsExceptionPending, JS_NewGlobalObject, JS_ObjectToOuterObject, JS_SetProperty};
|
||||
use js::jsapi::{JS_SetReservedSlot, MutableHandleValue, ObjectOpResult, OnNewGlobalHookOption};
|
||||
use js::jsapi::{RootedObject};
|
||||
use js::jsapi::{JS_DeletePropertyById1, JS_FireOnNewGlobalObject, JS_ForwardGetPropertyTo};
|
||||
use js::jsapi::{JS_GetClass, JS_GetProperty, JS_GetPrototype, JS_GetReservedSlot, JS_HasProperty};
|
||||
use js::jsapi::{JS_HasPropertyById, JS_IsExceptionPending, JS_NewGlobalObject};
|
||||
use js::jsapi::{JS_ObjectToOuterObject, JS_SetProperty, JS_SetReservedSlot};
|
||||
use js::jsapi::{MutableHandleValue, ObjectOpResult, OnNewGlobalHookOption, RootedObject};
|
||||
use js::jsval::{JSVal};
|
||||
use js::jsval::{PrivateValue, UndefinedValue};
|
||||
use js::rust::{GCMethods, ToString};
|
||||
|
@ -334,7 +333,6 @@ pub fn create_dom_global(cx: *mut JSContext,
|
|||
PrivateValue(Box::into_raw(proto_array) as *const libc::c_void));
|
||||
|
||||
let _ac = JSAutoCompartment::new(cx, obj.ptr);
|
||||
JS_InitStandardClasses(cx, obj.handle());
|
||||
JS_FireOnNewGlobalObject(cx, obj.handle());
|
||||
obj.ptr
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue