Pass a Reflector to WrapNewBindingObject instead of a Reflectable, and rename it GetReflector.

This commit is contained in:
Ms2ger 2013-11-03 12:15:11 +01:00
parent 9d8c97d3b0
commit 4074412107
2 changed files with 8 additions and 23 deletions

View file

@ -1569,16 +1569,7 @@ for (uint32_t i = 0; i < length; ++i) {
wrappingCode = ""
if (not descriptor.interface.isExternal() and
not descriptor.interface.isCallback()):
if descriptor.wrapperCache:
wrapMethod = "WrapNewBindingObject"
else:
if not isCreator:
raise MethodNotCreatorError(descriptor.interface.identifier.name)
wrapMethod = "WrapNewBindingNonWrapperCachedObject"
if descriptor.pointerType == '':
wrap = "%s.wrap(cx, ${obj}, ${jsvalPtr} as *mut JSVal)" % result
else:
wrap = "%s(cx, ${obj}, %s as @mut Reflectable, ${jsvalPtr} as *mut JSVal)" % (wrapMethod, result)
wrap = "GetReflector(cx, (%s).reflector(), ${jsvalPtr} as *mut JSVal)" % result
# We don't support prefable stuff in workers.
assert(not descriptor.prefable or not descriptor.workers)
if not descriptor.prefable:
@ -1596,11 +1587,7 @@ for (uint32_t i = 0; i < length; ++i) {
failed = wrapAndSetPtr("HandleNewBindingWrappingFailure(cx, ${obj}, %s, ${jsvalPtr})" % result)
wrappingCode += wrapAndSetPtr(wrap, failed)
else:
#wrap = "WrapObject(cx, ${obj}, %s, %s${jsvalPtr})" % (result, getIID)
if descriptor.pointerType == '':
wrap = "(%s.wrap(cx, ${obj}, ${jsvalPtr}) != 0)" % result
else:
wrap = "if WrapNewBindingObject(cx, ${obj}, %s as @mut Reflectable, ${jsvalPtr}) { 1 } else { 0 };" % result
wrap = "GetReflector(cx, (%s).reflector(), ${jsvalPtr} as *mut JSVal)" % result
wrappingCode += wrapAndSetPtr(wrap)
return (wrappingCode, False)

View file

@ -583,16 +583,14 @@ impl Reflector {
}
#[fixed_stack_segment]
pub fn WrapNewBindingObject(cx: *JSContext, _scope: *JSObject,
value: @mut Reflectable,
vp: *mut JSVal) -> JSBool {
unsafe {
let reflector = value.mut_reflector();
pub fn GetReflector(cx: *JSContext, reflector: &Reflector,
vp: *mut JSVal) -> JSBool {
let obj = reflector.get_jsobject();
assert!(obj.is_not_null());
*vp = RUST_OBJECT_TO_JSVAL(obj);
return JS_WrapValue(cx, cast::transmute(vp));
}
unsafe {
*vp = RUST_OBJECT_TO_JSVAL(obj);
return JS_WrapValue(cx, cast::transmute(vp));
}
}
#[fixed_stack_segment]