Merge pull request #2711 from Ms2ger/defineprop

Handle setting a readonly attribute on proxy reflectors correctly; r=jdm
This commit is contained in:
Ms2ger 2014-06-24 19:33:00 +02:00
commit ab94fea87a
2 changed files with 11 additions and 8 deletions

View file

@ -6,11 +6,13 @@ use dom::bindings::utils::is_dom_proxy;
use js::jsapi::{JSContext, jsid, JSPropertyDescriptor, JSObject, JSString, jschar}; use js::jsapi::{JSContext, jsid, JSPropertyDescriptor, JSObject, JSString, jschar};
use js::jsapi::{JS_GetPropertyDescriptorById, JS_NewUCString, JS_malloc, JS_free}; use js::jsapi::{JS_GetPropertyDescriptorById, JS_NewUCString, JS_malloc, JS_free};
use js::jsapi::{JSBool, JS_DefinePropertyById, JS_NewObjectWithGivenProto}; use js::jsapi::{JSBool, JS_DefinePropertyById, JS_NewObjectWithGivenProto};
use js::jsapi::JS_StrictPropertyStub; use js::jsapi::{JS_ReportErrorFlagsAndNumber, JS_StrictPropertyStub};
use js::jsapi::{JSREPORT_WARNING, JSREPORT_STRICT, JSREPORT_STRICT_MODE_ERROR};
use js::jsval::ObjectValue; use js::jsval::ObjectValue;
use js::glue::GetProxyExtra; use js::glue::GetProxyExtra;
use js::glue::{GetObjectProto, GetObjectParent, SetProxyExtra, GetProxyHandler}; use js::glue::{GetObjectProto, GetObjectParent, SetProxyExtra, GetProxyHandler};
use js::glue::InvokeGetOwnPropertyDescriptor; use js::glue::InvokeGetOwnPropertyDescriptor;
use js::glue::RUST_js_GetErrorMessage;
use js::{JSPROP_GETTER, JSPROP_ENUMERATE, JSPROP_READONLY, JSRESOLVE_QUALIFIED}; use js::{JSPROP_GETTER, JSPROP_ENUMERATE, JSPROP_READONLY, JSRESOLVE_QUALIFIED};
use libc; use libc;
@ -45,17 +47,18 @@ pub extern fn getPropertyDescriptor(cx: *mut JSContext, proxy: *mut JSObject, id
pub fn defineProperty_(cx: *mut JSContext, proxy: *mut JSObject, id: jsid, pub fn defineProperty_(cx: *mut JSContext, proxy: *mut JSObject, id: jsid,
desc: *JSPropertyDescriptor) -> JSBool { desc: *JSPropertyDescriptor) -> JSBool {
static JSMSG_GETTER_ONLY: libc::c_uint = 160;
unsafe { unsafe {
//FIXME: Workaround for https://github.com/mozilla/rust/issues/13385 //FIXME: Workaround for https://github.com/mozilla/rust/issues/13385
let setter: *libc::c_void = mem::transmute((*desc).setter); let setter: *libc::c_void = mem::transmute((*desc).setter);
let setter_stub: *libc::c_void = mem::transmute(JS_StrictPropertyStub); let setter_stub: *libc::c_void = mem::transmute(JS_StrictPropertyStub);
if ((*desc).attrs & JSPROP_GETTER) != 0 && setter == setter_stub { if ((*desc).attrs & JSPROP_GETTER) != 0 && setter == setter_stub {
/*return JS_ReportErrorFlagsAndNumber(cx, return JS_ReportErrorFlagsAndNumber(cx,
JSREPORT_WARNING | JSREPORT_STRICT | JSREPORT_WARNING | JSREPORT_STRICT |
JSREPORT_STRICT_MODE_ERROR, JSREPORT_STRICT_MODE_ERROR,
js_GetErrorMessage, NULL, Some(RUST_js_GetErrorMessage), ptr::mut_null(),
JSMSG_GETTER_ONLY);*/ JSMSG_GETTER_ONLY);
return 0;
} }
let expando = EnsureExpandoObject(cx, proxy); let expando = EnsureExpandoObject(cx, proxy);

@ -1 +1 @@
Subproject commit 99be3ff35cce83d3b12c284cf7713712cb467a0d Subproject commit de83c2e8ee046e5f60ee65810c58c36571d6be15