mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 1015790 - Remove PropDesc::descObj_. (r=jorendorff)
This commit is contained in:
parent
f4ca624100
commit
d365e40ce3
@ -524,12 +524,6 @@ JSCompartment::wrap(JSContext *cx, MutableHandle<PropDesc> desc)
|
||||
return false;
|
||||
desc.setSetter(set);
|
||||
}
|
||||
if (desc.descriptorValue().isObject()) {
|
||||
RootedObject descObj(cx, &desc.descriptorValue().toObject());
|
||||
if (!comp->wrap(cx, &descObj))
|
||||
return false;
|
||||
desc.setDescriptorObject(descObj);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -269,9 +269,10 @@ js::NewPropertyDescriptorObject(JSContext *cx, Handle<PropertyDescriptor> desc,
|
||||
Rooted<PropDesc> d(cx);
|
||||
|
||||
d.initFromPropertyDescriptor(desc);
|
||||
if (!d.makeObject(cx))
|
||||
RootedObject descObj(cx);
|
||||
if (!d.makeObject(cx, &descObj))
|
||||
return false;
|
||||
vp.set(d.descriptorValue());
|
||||
vp.setObject(*descObj);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -284,7 +285,6 @@ PropDesc::initFromPropertyDescriptor(Handle<PropertyDescriptor> desc)
|
||||
return;
|
||||
|
||||
isUndefined_ = false;
|
||||
descObj_ = nullptr;
|
||||
attrs = uint8_t(desc.attributes());
|
||||
JS_ASSERT_IF(attrs & JSPROP_READONLY, !(attrs & (JSPROP_GETTER | JSPROP_SETTER)));
|
||||
if (desc.hasGetterOrSetterObject()) {
|
||||
@ -328,11 +328,11 @@ PropDesc::populatePropertyDescriptor(HandleObject obj, MutableHandle<PropertyDes
|
||||
}
|
||||
|
||||
bool
|
||||
PropDesc::makeObject(JSContext *cx)
|
||||
PropDesc::makeObject(JSContext *cx, MutableHandleObject obj)
|
||||
{
|
||||
MOZ_ASSERT(!isUndefined());
|
||||
|
||||
RootedObject obj(cx, NewBuiltinClassInstance(cx, &JSObject::class_));
|
||||
obj.set(NewBuiltinClassInstance(cx, &JSObject::class_));
|
||||
if (!obj)
|
||||
return false;
|
||||
|
||||
@ -356,7 +356,6 @@ PropDesc::makeObject(JSContext *cx)
|
||||
return false;
|
||||
}
|
||||
|
||||
descObj_ = obj;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -466,9 +465,6 @@ PropDesc::initialize(JSContext *cx, const Value &origval, bool checkAccessors)
|
||||
}
|
||||
RootedObject desc(cx, &v.toObject());
|
||||
|
||||
/* Make a copy of the descriptor. We might need it later. */
|
||||
descObj_ = desc;
|
||||
|
||||
isUndefined_ = false;
|
||||
|
||||
/*
|
||||
|
@ -664,8 +664,7 @@ namespace js {
|
||||
|
||||
PropDesc::PropDesc(const Value &getter, const Value &setter,
|
||||
Enumerability enumerable, Configurability configurable)
|
||||
: descObj_(nullptr),
|
||||
value_(UndefinedValue()),
|
||||
: value_(UndefinedValue()),
|
||||
get_(getter), set_(setter),
|
||||
attrs(JSPROP_GETTER | JSPROP_SETTER | JSPROP_SHARED |
|
||||
(enumerable ? JSPROP_ENUMERATE : 0) |
|
||||
|
@ -5328,7 +5328,6 @@ DebuggerObject_defineProperty(JSContext *cx, unsigned argc, Value *vp)
|
||||
Rooted<PropDesc> desc(cx);
|
||||
if (!desc.initialize(cx, args[1], false))
|
||||
return false;
|
||||
desc.clearDescriptorObject();
|
||||
|
||||
if (!dbg->unwrapPropDescInto(cx, obj, desc, &desc))
|
||||
return false;
|
||||
@ -5340,8 +5339,6 @@ DebuggerObject_defineProperty(JSContext *cx, unsigned argc, Value *vp)
|
||||
ac.construct(cx, obj);
|
||||
if (!cx->compartment()->wrap(cx, &desc))
|
||||
return false;
|
||||
if (!desc.makeObject(cx))
|
||||
return false;
|
||||
|
||||
ErrorCopier ec(ac, dbg->toJSObject());
|
||||
bool dummy;
|
||||
@ -5383,8 +5380,6 @@ DebuggerObject_defineProperties(JSContext *cx, unsigned argc, Value *vp)
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
if (!cx->compartment()->wrap(cx, descs[i]))
|
||||
return false;
|
||||
if (descs[i].descriptorValue().isUndefined() && !descs[i].makeObject(cx))
|
||||
return false;
|
||||
}
|
||||
|
||||
ErrorCopier ec(ac, dbg->toJSObject());
|
||||
|
@ -25,7 +25,6 @@ PropDesc::PropDesc()
|
||||
void
|
||||
PropDesc::setUndefined()
|
||||
{
|
||||
descObj_ = nullptr;
|
||||
value_ = UndefinedValue();
|
||||
get_ = UndefinedValue();
|
||||
set_ = UndefinedValue();
|
||||
@ -302,8 +301,6 @@ js::ObjectImpl::markChildren(JSTracer *trc)
|
||||
void
|
||||
PropDesc::trace(JSTracer *trc)
|
||||
{
|
||||
if (descObj_)
|
||||
gc::MarkObjectRoot(trc, &descObj_, "PropDesc descriptor object");
|
||||
gc::MarkValueRoot(trc, &value_, "PropDesc value");
|
||||
gc::MarkValueRoot(trc, &get_, "PropDesc get");
|
||||
gc::MarkValueRoot(trc, &set_, "PropDesc set");
|
||||
|
@ -30,12 +30,6 @@ CastAsStrictPropertyOp(JSObject *object)
|
||||
*/
|
||||
struct PropDesc {
|
||||
private:
|
||||
/*
|
||||
* Original object from which this descriptor derives, passed through for
|
||||
* the benefit of proxies.
|
||||
*/
|
||||
JSObject *descObj_;
|
||||
|
||||
Value value_, get_, set_;
|
||||
|
||||
/* Property descriptor boolean fields. */
|
||||
@ -53,8 +47,7 @@ struct PropDesc {
|
||||
bool isUndefined_ : 1;
|
||||
|
||||
explicit PropDesc(const Value &v)
|
||||
: descObj_(nullptr),
|
||||
value_(v),
|
||||
: value_(v),
|
||||
get_(UndefinedValue()), set_(UndefinedValue()),
|
||||
attrs(0),
|
||||
hasGet_(false), hasSet_(false),
|
||||
@ -80,8 +73,7 @@ struct PropDesc {
|
||||
|
||||
PropDesc(const Value &v, Writability writable,
|
||||
Enumerability enumerable, Configurability configurable)
|
||||
: descObj_(nullptr),
|
||||
value_(v),
|
||||
: value_(v),
|
||||
get_(UndefinedValue()), set_(UndefinedValue()),
|
||||
attrs((writable ? 0 : JSPROP_READONLY) |
|
||||
(enumerable ? JSPROP_ENUMERATE : 0) |
|
||||
@ -126,7 +118,7 @@ struct PropDesc {
|
||||
*/
|
||||
void initFromPropertyDescriptor(Handle<JSPropertyDescriptor> desc);
|
||||
void populatePropertyDescriptor(HandleObject obj, MutableHandle<JSPropertyDescriptor> desc) const;
|
||||
bool makeObject(JSContext *cx);
|
||||
bool makeObject(JSContext *cx, MutableHandleObject objp);
|
||||
|
||||
/* Reset the descriptor entirely. */
|
||||
void setUndefined();
|
||||
@ -139,13 +131,6 @@ struct PropDesc {
|
||||
bool hasEnumerable() const { MOZ_ASSERT(!isUndefined()); return hasEnumerable_; }
|
||||
bool hasConfigurable() const { MOZ_ASSERT(!isUndefined()); return hasConfigurable_; }
|
||||
|
||||
Value descriptorValue() const {
|
||||
MOZ_ASSERT(!isUndefined());
|
||||
return descObj_ ? ObjectValue(*descObj_) : UndefinedValue();
|
||||
}
|
||||
void setDescriptorObject(JSObject *obj) { descObj_ = obj; }
|
||||
void clearDescriptorObject() { setDescriptorObject(nullptr); }
|
||||
|
||||
uint8_t attributes() const { MOZ_ASSERT(!isUndefined()); return attrs; }
|
||||
|
||||
/* 8.10.1 IsAccessorDescriptor(desc) */
|
||||
@ -263,8 +248,6 @@ class PropDescOperations
|
||||
bool hasEnumerable() const { return desc()->hasEnumerable(); }
|
||||
bool hasConfigurable() const { return desc()->hasConfigurable(); }
|
||||
|
||||
Value descriptorValue() const { return desc()->descriptorValue(); }
|
||||
|
||||
uint8_t attributes() const { return desc()->attributes(); }
|
||||
|
||||
bool isAccessorDescriptor() const { return desc()->isAccessorDescriptor(); }
|
||||
@ -309,8 +292,8 @@ class MutablePropDescOperations : public PropDescOperations<Outer>
|
||||
void initFromPropertyDescriptor(Handle<JSPropertyDescriptor> descriptor) {
|
||||
desc()->initFromPropertyDescriptor(descriptor);
|
||||
}
|
||||
bool makeObject(JSContext *cx) {
|
||||
return desc()->makeObject(cx);
|
||||
bool makeObject(JSContext *cx, MutableHandleObject objp) {
|
||||
return desc()->makeObject(cx, objp);
|
||||
}
|
||||
|
||||
void setValue(const Value &value) {
|
||||
@ -324,9 +307,6 @@ class MutablePropDescOperations : public PropDescOperations<Outer>
|
||||
}
|
||||
|
||||
void setUndefined() { desc()->setUndefined(); }
|
||||
|
||||
void setDescriptorObject(JSObject *obj) { desc()->setDescriptorObject(obj); }
|
||||
void clearDescriptorObject() { desc()->clearDescriptorObject(); }
|
||||
};
|
||||
|
||||
} /* namespace JS */
|
||||
@ -337,8 +317,7 @@ template <>
|
||||
struct GCMethods<PropDesc> {
|
||||
static PropDesc initial() { return PropDesc(); }
|
||||
static bool poisoned(const PropDesc &desc) {
|
||||
return JS::IsPoisonedPtr(desc.descObj_) ||
|
||||
(desc.value_.isGCThing() &&
|
||||
return (desc.value_.isGCThing() &&
|
||||
JS::IsPoisonedPtr(desc.value_.toGCThing())) ||
|
||||
(desc.get_.isGCThing() &&
|
||||
JS::IsPoisonedPtr(desc.get_.toGCThing())) ||
|
||||
|
Loading…
Reference in New Issue
Block a user