Bug 1015790 - Remove PropDesc::descObj_. (r=jorendorff)

This commit is contained in:
Eric Faust 2014-06-27 03:46:00 -07:00
parent f4ca624100
commit d365e40ce3
6 changed files with 12 additions and 52 deletions

View File

@ -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;
}

View File

@ -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;
/*

View File

@ -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) |

View File

@ -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());

View File

@ -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");

View File

@ -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())) ||