mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 20:30:41 +00:00
Backed out changeset d201babc2e84 (bug 1103368)
This commit is contained in:
parent
9bd1792b15
commit
e3300a9ec7
@ -532,7 +532,8 @@ JavaScriptShared::findObjectById(JSContext *cx, const ObjectId &objId)
|
||||
return obj;
|
||||
}
|
||||
|
||||
static const uint64_t UnknownPropertyOp = 1;
|
||||
static const uint64_t DefaultPropertyOp = 1;
|
||||
static const uint64_t UnknownPropertyOp = 2;
|
||||
|
||||
bool
|
||||
JavaScriptShared::fromDescriptor(JSContext *cx, Handle<JSPropertyDescriptor> desc,
|
||||
@ -555,7 +556,7 @@ JavaScriptShared::fromDescriptor(JSContext *cx, Handle<JSPropertyDescriptor> des
|
||||
out->getter() = objVar;
|
||||
} else {
|
||||
if (desc.getter() == JS_PropertyStub)
|
||||
out->getter() = 0;
|
||||
out->getter() = DefaultPropertyOp;
|
||||
else
|
||||
out->getter() = UnknownPropertyOp;
|
||||
}
|
||||
@ -570,7 +571,7 @@ JavaScriptShared::fromDescriptor(JSContext *cx, Handle<JSPropertyDescriptor> des
|
||||
out->setter() = objVar;
|
||||
} else {
|
||||
if (desc.setter() == JS_StrictPropertyStub)
|
||||
out->setter() = 0;
|
||||
out->setter() = DefaultPropertyOp;
|
||||
else
|
||||
out->setter() = UnknownPropertyOp;
|
||||
}
|
||||
@ -610,7 +611,10 @@ JavaScriptShared::toDescriptor(JSContext *cx, const PPropertyDescriptor &in,
|
||||
return false;
|
||||
out.setGetter(JS_DATA_TO_FUNC_PTR(JSPropertyOp, getter.get()));
|
||||
} else {
|
||||
out.setGetter(UnknownPropertyStub);
|
||||
if (in.getter().get_uint64_t() == DefaultPropertyOp)
|
||||
out.setGetter(JS_PropertyStub);
|
||||
else
|
||||
out.setGetter(UnknownPropertyStub);
|
||||
}
|
||||
|
||||
if (in.setter().type() == GetterSetter::Tuint64_t && !in.setter().get_uint64_t()) {
|
||||
@ -622,7 +626,10 @@ JavaScriptShared::toDescriptor(JSContext *cx, const PPropertyDescriptor &in,
|
||||
return false;
|
||||
out.setSetter(JS_DATA_TO_FUNC_PTR(JSStrictPropertyOp, setter.get()));
|
||||
} else {
|
||||
out.setSetter(UnknownStrictPropertyStub);
|
||||
if (in.setter().get_uint64_t() == DefaultPropertyOp)
|
||||
out.setSetter(JS_StrictPropertyStub);
|
||||
else
|
||||
out.setSetter(UnknownStrictPropertyStub);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -190,12 +190,8 @@ WrapperAnswer::RecvDefineProperty(const ObjectId &objId, const JSIDVariant &idVa
|
||||
// accessors: they have either JSFunctions or
|
||||
// JSPropertyOps.
|
||||
desc.attributes() | JSPROP_PROPOP_ACCESSORS,
|
||||
JS_PROPERTYOP_GETTER(desc.getter()
|
||||
? desc.getter()
|
||||
: JS_PropertyStub),
|
||||
JS_PROPERTYOP_SETTER(desc.setter()
|
||||
? desc.setter()
|
||||
: JS_StrictPropertyStub)))
|
||||
JS_PROPERTYOP_GETTER(desc.getter()),
|
||||
JS_PROPERTYOP_SETTER(desc.setter())))
|
||||
{
|
||||
return fail(cx, rs);
|
||||
}
|
||||
|
@ -674,9 +674,6 @@ JS_FRIEND_API(bool)
|
||||
js::CheckDefineProperty(JSContext *cx, HandleObject obj, HandleId id, HandleValue value,
|
||||
unsigned attrs, PropertyOp getter, StrictPropertyOp setter)
|
||||
{
|
||||
MOZ_ASSERT(getter != JS_PropertyStub);
|
||||
MOZ_ASSERT(setter != JS_StrictPropertyStub);
|
||||
|
||||
if (!obj->isNative())
|
||||
return true;
|
||||
|
||||
@ -698,8 +695,8 @@ js::CheckDefineProperty(JSContext *cx, HandleObject obj, HandleId id, HandleValu
|
||||
// Steps 6-11, skipping step 10.a.ii. Prohibit redefining a permanent
|
||||
// property with different metadata, except to make a writable property
|
||||
// non-writable.
|
||||
if (getter != desc.getter() ||
|
||||
setter != desc.setter() ||
|
||||
if ((getter != desc.getter() && !(getter == JS_PropertyStub && !desc.getter())) ||
|
||||
(setter != desc.setter() && !(setter == JS_StrictPropertyStub && !desc.setter())) ||
|
||||
(attrs != desc.attributes() && attrs != (desc.attributes() | JSPROP_READONLY)))
|
||||
{
|
||||
return Throw(cx, id, JSMSG_CANT_REDEFINE_PROP);
|
||||
|
@ -41,8 +41,13 @@ DirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId i
|
||||
RootedValue v(cx, desc.value());
|
||||
return CheckDefineProperty(cx, target, id, v, desc.attributes(),
|
||||
desc.getter(), desc.setter()) &&
|
||||
JSObject::defineGeneric(cx, target, id, v, desc.getter(), desc.setter(),
|
||||
desc.attributes());
|
||||
JS_DefinePropertyById(cx, target, id, v,
|
||||
// Descriptors never store JSNatives for
|
||||
// accessors: they have either JSFunctions or
|
||||
// JSPropertyOps.
|
||||
desc.attributes() | JSPROP_PROPOP_ACCESSORS,
|
||||
JS_PROPERTYOP_GETTER(desc.getter()),
|
||||
JS_PROPERTYOP_SETTER(desc.setter()));
|
||||
}
|
||||
|
||||
bool
|
||||
|
Loading…
x
Reference in New Issue
Block a user