mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 603201 - Adjust SetPropertyOperation's signature slightly to be more pleasant. r=efaust
--HG-- extra : rebase_source : 42a81852d5d26c8df8973bf3fcc790ff0cea0bb5
This commit is contained in:
parent
c1e10ae4e6
commit
1ce003ab98
@ -303,39 +303,59 @@ NameOperation(JSContext *cx, InterpreterFrame *fp, jsbytecode *pc, MutableHandle
|
||||
return FetchName<false>(cx, scopeRoot, pobjRoot, nameRoot, shapeRoot, vp);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
SetPropertyOperation(JSContext *cx, HandleScript script, jsbytecode *pc, HandleValue lval,
|
||||
HandleValue rval)
|
||||
static bool
|
||||
SetObjectProperty(JSContext *cx, JSOp op, HandleValue lval, HandleId id, MutableHandleValue rref)
|
||||
{
|
||||
MOZ_ASSERT(*pc == JSOP_SETPROP || *pc == JSOP_STRICTSETPROP);
|
||||
MOZ_ASSERT(lval.isObject());
|
||||
|
||||
bool strict = *pc == JSOP_STRICTSETPROP;
|
||||
RootedObject obj(cx, &lval.toObject());
|
||||
|
||||
RootedObject obj(cx, ToObjectFromStack(cx, lval));
|
||||
if (!obj)
|
||||
return false;
|
||||
|
||||
RootedValue rref(cx, rval);
|
||||
|
||||
RootedId id(cx, NameToId(script->getName(pc)));
|
||||
bool strict = op == JSOP_STRICTSETPROP;
|
||||
if (MOZ_LIKELY(!obj->getOps()->setProperty)) {
|
||||
if (!baseops::SetPropertyHelper<SequentialExecution>(cx,
|
||||
obj.as<NativeObject>(),
|
||||
obj.as<NativeObject>(),
|
||||
id,
|
||||
baseops::Qualified,
|
||||
&rref, strict))
|
||||
rref, strict))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!JSObject::setGeneric(cx, obj, obj, id, &rref, strict))
|
||||
if (!JSObject::setGeneric(cx, obj, obj, id, rref, strict))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
SetPrimitiveProperty(JSContext *cx, JSOp op, HandleValue lval, HandleId id,
|
||||
MutableHandleValue rref)
|
||||
{
|
||||
MOZ_ASSERT(lval.isPrimitive());
|
||||
|
||||
RootedObject obj(cx, ToObjectFromStack(cx, lval));
|
||||
if (!obj)
|
||||
return false;
|
||||
|
||||
RootedValue receiver(cx, ObjectValue(*obj));
|
||||
return SetObjectProperty(cx, op, receiver, id, rref);
|
||||
}
|
||||
|
||||
static bool
|
||||
SetPropertyOperation(JSContext *cx, JSOp op, HandleValue lval, HandleId id, HandleValue rval)
|
||||
{
|
||||
MOZ_ASSERT(op == JSOP_SETPROP || op == JSOP_STRICTSETPROP);
|
||||
|
||||
RootedValue rref(cx, rval);
|
||||
|
||||
if (lval.isPrimitive())
|
||||
return SetPrimitiveProperty(cx, op, lval, id, &rref);
|
||||
|
||||
return SetObjectProperty(cx, op, lval, id, &rref);
|
||||
}
|
||||
|
||||
bool
|
||||
js::ReportIsNotFunction(JSContext *cx, HandleValue v, int numToSkip, MaybeConstruct construct)
|
||||
{
|
||||
@ -2403,7 +2423,9 @@ CASE(JSOP_STRICTSETPROP)
|
||||
HandleValue lval = REGS.stackHandleAt(-2);
|
||||
HandleValue rval = REGS.stackHandleAt(-1);
|
||||
|
||||
if (!SetPropertyOperation(cx, script, REGS.pc, lval, rval))
|
||||
RootedId &id = rootId0;
|
||||
id = NameToId(script->getName(REGS.pc));
|
||||
if (!SetPropertyOperation(cx, JSOp(*REGS.pc), lval, id, rval))
|
||||
goto error;
|
||||
|
||||
REGS.sp[-2] = REGS.sp[-1];
|
||||
|
Loading…
Reference in New Issue
Block a user