diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 99997c0f38a..bbc25af0145 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -40,6 +40,21 @@ use js; static TOSTRING_CLASS_RESERVED_SLOT: libc::size_t = 0; static TOSTRING_NAME_RESERVED_SLOT: libc::size_t = 1; +mod jsval { + use js::glue::{RUST_JSVAL_IS_STRING, RUST_JSVAL_TO_STRING}; + use js::jsapi::{JSVal, JSString}; + + #[fixed_stack_segment] + pub fn is_string(v: JSVal) -> bool { + unsafe { RUST_JSVAL_IS_STRING(v) == 1 } + } + + #[fixed_stack_segment] + pub unsafe fn to_string(v: JSVal) -> *JSString { + RUST_JSVAL_TO_STRING(v) + } +} + pub struct GlobalStaticData { proxy_handlers: HashMap<uint, *libc::c_void>, attribute_ids: HashMap<uint, ~[jsid]>, @@ -70,8 +85,6 @@ extern fn InterfaceObjectToString(cx: *JSContext, _argc: c_uint, vp: *mut JSVal) let v = GetFunctionNativeReserved(callee, TOSTRING_CLASS_RESERVED_SLOT); let clasp: *JSClass = cast::transmute(RUST_JSVAL_TO_PRIVATE(*v)); - let v = GetFunctionNativeReserved(callee, TOSTRING_NAME_RESERVED_SLOT); - if GetObjectJSClass(obj) != clasp { /*let jsname: *JSString = RUST_JSVAL_TO_STRING(*v); let length = 0; @@ -83,7 +96,9 @@ extern fn InterfaceObjectToString(cx: *JSContext, _argc: c_uint, vp: *mut JSVal) return 0; } - let name = jsval_to_str(cx, *v).unwrap(); + let v = *GetFunctionNativeReserved(callee, TOSTRING_NAME_RESERVED_SLOT); + assert!(jsval::is_string(v)); + let name = jsstring_to_str(cx, jsval::to_string(v)); let retval = Some(~"function " + name + "() {\n [native code]\n}"); *vp = domstring_to_jsval(cx, &retval); return 1; |