diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-07-29 17:22:06 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-07-29 17:22:06 +0200 |
commit | 4da88f0ecc92149034f5bba70d5105f995693b1e (patch) | |
tree | a323c80c2dc9eb01731162f80a976ec6728257e7 /src | |
parent | 1f04ce807dcfbea62524d4a33c8432fa2e6f018f (diff) | |
parent | 6b44f92c4f27c541292af3ab2fcb266f04ea20b0 (diff) | |
download | servo-4da88f0ecc92149034f5bba70d5105f995693b1e.tar.gz servo-4da88f0ecc92149034f5bba70d5105f995693b1e.zip |
Merge pull request #2947 from Ms2ger/delete-trap
Implement the delete proxy trap (fixes #2213); r=jdm
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 4 | ||||
-rw-r--r-- | src/components/script/dom/bindings/proxyhandler.rs | 21 | ||||
m--------- | src/support/spidermonkey/rust-mozjs | 0 |
3 files changed, 22 insertions, 3 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 52a68953955..84f978e8f8f 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -2061,7 +2061,7 @@ let traps = ProxyTraps { getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor), defineProperty: Some(defineProperty), getOwnPropertyNames: ptr::null(), - delete_: None, + delete_: Some(delete_), enumerate: ptr::null(), has: None, @@ -4541,7 +4541,7 @@ class CGBindingRoot(CGThing): 'dom::bindings::proxyhandler', 'dom::bindings::proxyhandler::{_obj_toString, defineProperty}', 'dom::bindings::proxyhandler::{FillPropertyDescriptor, GetExpandoObject}', - 'dom::bindings::proxyhandler::{getPropertyDescriptor}', + 'dom::bindings::proxyhandler::{delete_, getPropertyDescriptor}', 'dom::bindings::str::ByteString', 'page::JSPageInfo', 'libc', diff --git a/src/components/script/dom/bindings/proxyhandler.rs b/src/components/script/dom/bindings/proxyhandler.rs index 07d750e438e..1a035a26eb2 100644 --- a/src/components/script/dom/bindings/proxyhandler.rs +++ b/src/components/script/dom/bindings/proxyhandler.rs @@ -10,7 +10,8 @@ use js::jsapi::{JS_GetPropertyDescriptorById, JS_NewUCString, JS_malloc, JS_free use js::jsapi::{JSBool, JS_DefinePropertyById, JS_NewObjectWithGivenProto}; use js::jsapi::{JS_ReportErrorFlagsAndNumber, JS_StrictPropertyStub}; use js::jsapi::{JSREPORT_WARNING, JSREPORT_STRICT, JSREPORT_STRICT_MODE_ERROR}; -use js::jsval::ObjectValue; +use js::jsapi::JS_DeletePropertyById2; +use js::jsval::{UndefinedValue, ObjectValue}; use js::glue::GetProxyExtra; use js::glue::{GetObjectProto, GetObjectParent, SetProxyExtra, GetProxyHandler}; use js::glue::InvokeGetOwnPropertyDescriptor; @@ -78,6 +79,24 @@ pub extern fn defineProperty(cx: *mut JSContext, proxy: *mut JSObject, id: jsid, defineProperty_(cx, proxy, id, desc) } +pub extern fn delete_(cx: *mut JSContext, proxy: *mut JSObject, id: jsid, + bp: *mut bool) -> JSBool { + unsafe { + let expando = EnsureExpandoObject(cx, proxy); + if expando.is_null() { + return 0; + } + + let mut value = UndefinedValue(); + if JS_DeletePropertyById2(cx, expando, id, &mut value) == 0 { + return 0; + } + + *bp = value.to_boolean(); + return 1; + } +} + pub fn _obj_toString(cx: *mut JSContext, className: *libc::c_char) -> *mut JSString { unsafe { let name = str::raw::from_c_str(className); diff --git a/src/support/spidermonkey/rust-mozjs b/src/support/spidermonkey/rust-mozjs -Subproject 718a634f8ce07596844e56c3b53399d9d01bab0 +Subproject 6fa1d8f73287056adbac9e9df90308e04cca6eb |