diff --git a/src/rust-mozjs b/src/rust-mozjs index de66662c301..e2b17f323b0 160000 --- a/src/rust-mozjs +++ b/src/rust-mozjs @@ -1 +1 @@ -Subproject commit de66662c301b2c00dacabdf0d82adf22d16232b4 +Subproject commit e2b17f323b0ab2d6a2d806d114bd1e61f3b1ba50 diff --git a/src/servo/dom/bindings/element.rs b/src/servo/dom/bindings/element.rs index e5729089dd9..7bf59808d33 100644 --- a/src/servo/dom/bindings/element.rs +++ b/src/servo/dom/bindings/element.rs @@ -97,8 +97,10 @@ extern fn HTMLImageElement_setWidth(cx: *JSContext, _argc: c_uint, vp: *mut jsva match nd.kind { ~Element(ed) => { match ed.kind { - ~HTMLImageElement(img) => - img.size.width = px_to_au(RUST_JSVAL_TO_INT(*vp) as int), + ~HTMLImageElement(img) => { + let arg = ptr::offset(JS_ARGV(cx, unsafe::reinterpret_cast(&vp)), 0); + img.size.width = px_to_au(RUST_JSVAL_TO_INT(*arg) as int) + }, _ => fail ~"why is this not an image element?" } } diff --git a/src/servo/dom/bindings/utils.rs b/src/servo/dom/bindings/utils.rs index dd7d89e4018..af1036e0a0c 100644 --- a/src/servo/dom/bindings/utils.rs +++ b/src/servo/dom/bindings/utils.rs @@ -79,13 +79,13 @@ fn get_compartment(cx: *JSContext) -> *bare_compartment { } } -extern fn has_instance(_cx: *JSContext, obj: *JSObject, v: *jsval, bp: *mut JSBool) -> JSBool { +extern fn has_instance(_cx: *JSContext, obj: **JSObject, v: *jsval, bp: *mut JSBool) -> JSBool { //XXXjdm this is totally broken for non-object values let mut o = RUST_JSVAL_TO_OBJECT(unsafe {*v}); - let clasp = JS_GetClass(obj); + let obj = unsafe {*obj}; unsafe { *bp = 0; } while o.is_not_null() { - if JS_GetClass(o) == clasp { + if o == obj { unsafe { *bp = 1; } break; } @@ -95,7 +95,7 @@ extern fn has_instance(_cx: *JSContext, obj: *JSObject, v: *jsval, bp: *mut JSBo } fn prototype_jsclass(name: ~str) -> fn(bare_compartment) -> JSClass { - return fn@(compartment: bare_compartment) -> JSClass { + |compartment: bare_compartment, copy name| { {name: compartment.add_name(name), flags: 0, addProperty: GetJSClassHookStubPointer(PROPERTY_STUB) as *u8, @@ -119,12 +119,12 @@ fn prototype_jsclass(name: ~str) -> fn(bare_compartment) -> JSClass { null(), null(), null(), null(), null(), // 30 null(), null(), null(), null(), null(), // 35 null(), null(), null(), null(), null())} // 40 - }; + } } fn instance_jsclass(name: ~str, finalize: *u8) -> fn(bare_compartment) -> JSClass { - return fn@(compartment: bare_compartment) -> JSClass { + |compartment: bare_compartment, copy name| { {name: compartment.add_name(name), flags: JSCLASS_HAS_RESERVED_SLOTS(1), addProperty: GetJSClassHookStubPointer(PROPERTY_STUB) as *u8, @@ -148,7 +148,7 @@ fn instance_jsclass(name: ~str, finalize: *u8) null(), null(), null(), null(), null(), // 30 null(), null(), null(), null(), null(), // 35 null(), null(), null(), null(), null())} // 40 - }; + } } fn define_empty_prototype(name: ~str, proto: Option<~str>, compartment: bare_compartment) diff --git a/src/test/test_image_getter.js b/src/test/test_image_getter.js index cd94d71639a..ea3763c5c37 100644 --- a/src/test/test_image_getter.js +++ b/src/test/test_image_getter.js @@ -1,15 +1,16 @@ function setWidth(w, i) { - var elem = document.documentElement.firstChild; elem.width = w; - debug(elem.width); + window.alert(elem.width); w += i; if (w == 0 || w == 1000) i *= -1; window.setTimeout(function() { setWidth(w, i); }, 50); } -var elem = document.documentElement.firstChild; -debug(elem.tagName); -debug(elem instanceof HTMLImageElement); -debug(elem.width); +var elem = document.documentElement.firstChild.firstChild.nextSibling.firstChild; +window.alert(elem.tagName); +window.alert(elem instanceof HTMLImageElement); +window.alert(elem instanceof HTMLElement); +window.alert(elem instanceof Element); +window.alert(elem.width); setWidth(1000, -10); \ No newline at end of file