aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-07-29 17:22:06 +0200
committerMs2ger <ms2ger@gmail.com>2014-07-29 17:22:06 +0200
commit4da88f0ecc92149034f5bba70d5105f995693b1e (patch)
treea323c80c2dc9eb01731162f80a976ec6728257e7 /src
parent1f04ce807dcfbea62524d4a33c8432fa2e6f018f (diff)
parent6b44f92c4f27c541292af3ab2fcb266f04ea20b0 (diff)
downloadservo-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.py4
-rw-r--r--src/components/script/dom/bindings/proxyhandler.rs21
m---------src/support/spidermonkey/rust-mozjs0
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