aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2013-11-08 11:57:11 +0100
committerMs2ger <ms2ger@gmail.com>2013-11-09 14:07:09 +0100
commit255864a843cfa01440c1f1c8c177a24b3aa3e1bf (patch)
tree9337b377dde375b1fb0ac495ce8644047a3a5a7b /src
parent610d1649cdb351a6fe9e1540a323e36edc2403b8 (diff)
downloadservo-255864a843cfa01440c1f1c8c177a24b3aa3e1bf.tar.gz
servo-255864a843cfa01440c1f1c8c177a24b3aa3e1bf.zip
Simplify InterfaceObjectToString.
Diffstat (limited to 'src')
-rw-r--r--src/components/script/dom/bindings/utils.rs21
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;