aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/bindings/utils.rs')
-rw-r--r--src/components/script/dom/bindings/utils.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs
index e75e9d5198f..99997c0f38a 100644
--- a/src/components/script/dom/bindings/utils.rs
+++ b/src/components/script/dom/bindings/utils.rs
@@ -29,6 +29,7 @@ use js::jsapi::{JS_ValueToString, JS_GetReservedSlot, JS_SetReservedSlot};
use js::jsapi::{JSContext, JSObject, JSBool, jsid, JSClass, JSNative, JSTracer};
use js::jsapi::{JSFunctionSpec, JSPropertySpec, JSVal, JSPropertyDescriptor};
use js::jsapi::{JSPropertyOp, JSStrictPropertyOp, JS_NewGlobalObject, JS_InitStandardClasses};
+use js::jsapi::{JSString};
use js::jsfriendapi::bindgen::JS_NewObjectWithUniqueType;
use js::{JSPROP_ENUMERATE, JSVAL_NULL, JSCLASS_IS_GLOBAL, JSCLASS_IS_DOMJSCLASS};
use js::{JSPROP_PERMANENT, JSID_VOID, JSPROP_NATIVE_ACCESSORS, JSPROP_GETTER};
@@ -191,6 +192,25 @@ pub unsafe fn squirrel_away<T>(x: @mut T) -> *Box<T> {
y
}
+#[fixed_stack_segment]
+pub fn jsstring_to_str(cx: *JSContext, s: *JSString) -> ~str {
+ unsafe {
+ let length = 0;
+ let chars = JS_GetStringCharsAndLength(cx, s, &length);
+ do vec::raw::buf_as_slice(chars, length as uint) |char_vec| {
+ str::from_utf16(char_vec)
+ }
+ }
+}
+
+#[fixed_stack_segment]
+pub fn jsid_to_str(cx: *JSContext, id: jsid) -> ~str {
+ unsafe {
+ assert!(RUST_JSID_IS_STRING(id) != 0);
+ jsstring_to_str(cx, RUST_JSID_TO_STRING(id))
+ }
+}
+
//XXX very incomplete
#[fixed_stack_segment]
pub fn jsval_to_str(cx: *JSContext, v: JSVal) -> Result<~str, ()> {