Bug 614338 - Move some call object property methods into the js namespace. r=dmandelin

--HG--
extra : rebase_source : 3816a3ae6d775e5866030c8a51cc305f09dda1f2
This commit is contained in:
Jeff Walden 2010-11-16 15:30:57 -08:00
Родитель 84e48a76c5
Коммит 9c4dda1c40
5 изменённых файлов: 40 добавлений и 32 удалений

Просмотреть файл

@ -1523,10 +1523,10 @@ JS_GetPropertyDesc(JSContext *cx, JSObject *obj, JSScopeProperty *sprop,
| (!shape->writable() ? JSPD_READONLY : 0)
| (!shape->configurable() ? JSPD_PERMANENT : 0);
pd->spare = 0;
if (shape->getter() == js_GetCallArg) {
if (shape->getter() == GetCallArg) {
pd->slot = shape->shortid;
pd->flags |= JSPD_ARGUMENT;
} else if (shape->getter() == js_GetCallVar) {
} else if (shape->getter() == GetCallVar) {
pd->slot = shape->shortid;
pd->flags |= JSPD_VARIABLE;
} else {

Просмотреть файл

@ -1232,6 +1232,8 @@ CallPropertyOp(JSContext *cx, JSObject *obj, jsid id, Value *vp,
return true;
}
namespace js {
static JSBool
GetCallArguments(JSContext *cx, JSObject *obj, jsid id, Value *vp)
{
@ -1245,7 +1247,7 @@ SetCallArguments(JSContext *cx, JSObject *obj, jsid id, Value *vp)
}
JSBool
js_GetCallArg(JSContext *cx, JSObject *obj, jsid id, Value *vp)
GetCallArg(JSContext *cx, JSObject *obj, jsid id, Value *vp)
{
return CallPropertyOp(cx, obj, id, vp, JSCPK_ARG);
}
@ -1269,13 +1271,13 @@ SetFlatUpvar(JSContext *cx, JSObject *obj, jsid id, Value *vp)
}
JSBool
js_GetCallVar(JSContext *cx, JSObject *obj, jsid id, Value *vp)
GetCallVar(JSContext *cx, JSObject *obj, jsid id, Value *vp)
{
return CallPropertyOp(cx, obj, id, vp, JSCPK_VAR);
}
JSBool
js_GetCallVarChecked(JSContext *cx, JSObject *obj, jsid id, Value *vp)
GetCallVarChecked(JSContext *cx, JSObject *obj, jsid id, Value *vp)
{
if (!CallPropertyOp(cx, obj, id, vp, JSCPK_VAR))
return false;
@ -1289,6 +1291,8 @@ SetCallVar(JSContext *cx, JSObject *obj, jsid id, Value *vp)
return CallPropertyOp(cx, obj, id, vp, JSCPK_VAR, true);
}
} // namespace js
#if JS_TRACER
JSBool JS_FASTCALL
js_SetCallArg(JSContext *cx, JSObject *obj, jsid slotid, ValueArgType arg)
@ -3070,7 +3074,7 @@ JSFunction::lastArg() const
{
const Shape *shape = lastVar();
if (u.i.nvars != 0) {
while (shape->previous() && shape->getter() != js_GetCallArg)
while (shape->previous() && shape->getter() != GetCallArg)
shape = shape->previous();
}
return shape;
@ -3107,7 +3111,7 @@ JSFunction::addLocal(JSContext *cx, JSAtom *atom, JSLocalKind kind)
JS_ASSERT(u.i.nupvars == 0);
indexp = &nargs;
getter = js_GetCallArg;
getter = GetCallArg;
setter = SetCallArg;
slot += nargs;
} else if (kind == JSLOCAL_UPVAR) {
@ -3119,7 +3123,7 @@ JSFunction::addLocal(JSContext *cx, JSAtom *atom, JSLocalKind kind)
JS_ASSERT(u.i.nupvars == 0);
indexp = &u.i.nvars;
getter = js_GetCallVar;
getter = GetCallVar;
setter = SetCallVar;
if (kind == JSLOCAL_CONST)
attrs |= JSPROP_READONLY;
@ -3168,7 +3172,7 @@ JSFunction::addLocal(JSContext *cx, JSAtom *atom, JSLocalKind kind)
}
if (findArgInsertionPoint) {
while (parent->parent && parent->getter() != js_GetCallArg) {
while (parent->parent && parent->getter() != GetCallArg) {
++parent->slot;
JS_ASSERT(parent->slot == parent->slotSpan);
++parent->slotSpan;
@ -3197,7 +3201,7 @@ JSFunction::lookupLocal(JSContext *cx, JSAtom *atom, uintN *indexp)
if (shape) {
JSLocalKind localKind;
if (shape->getter() == js_GetCallArg)
if (shape->getter() == GetCallArg)
localKind = JSLOCAL_ARG;
else if (shape->getter() == GetFlatUpvar)
localKind = JSLOCAL_UPVAR;
@ -3241,7 +3245,7 @@ JSFunction::getLocalNameArray(JSContext *cx, JSArenaPool *pool)
uintN index = uint16(shape.shortid);
jsuword constFlag = 0;
if (shape.getter() == js_GetCallArg) {
if (shape.getter() == GetCallArg) {
JS_ASSERT(index < nargs);
} else if (shape.getter() == GetFlatUpvar) {
JS_ASSERT(index < u.i.nupvars);
@ -3258,7 +3262,7 @@ JSFunction::getLocalNameArray(JSContext *cx, JSArenaPool *pool)
atom = JSID_TO_ATOM(shape.id);
} else {
JS_ASSERT(JSID_IS_INT(shape.id));
JS_ASSERT(shape.getter() == js_GetCallArg);
JS_ASSERT(shape.getter() == GetCallArg);
atom = NULL;
}

Просмотреть файл

@ -579,11 +579,20 @@ extern JSBool JS_FASTCALL
js_PutCallObjectOnTrace(JSContext *cx, JSObject *scopeChain, uint32 nargs,
js::Value *argv, uint32 nvars, js::Value *slots);
extern JSBool
js_GetCallArg(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
namespace js {
extern JSBool
js_GetCallVar(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
GetCallArg(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
extern JSBool
GetCallVar(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
/*
* Slower version of js_GetCallVar used when call_resolve detects an attempt to
* leak an optimized closure via indirect or debugger eval.
*/
extern JSBool
GetCallVarChecked(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
extern JSBool
SetCallArg(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
@ -591,12 +600,7 @@ SetCallArg(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
extern JSBool
SetCallVar(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
/*
* Slower version of js_GetCallVar used when call_resolve detects an attempt to
* leak an optimized closure via indirect or debugger eval.
*/
extern JSBool
js_GetCallVarChecked(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
} // namespace js
extern JSBool
js_GetArgsValue(JSContext *cx, JSStackFrame *fp, js::Value *vp);

Просмотреть файл

@ -8051,12 +8051,12 @@ TraceRecorder::callProp(JSObject* obj, JSProperty* prop, jsid id, Value*& vp,
vp = NULL;
JSStackFrame* cfp = (JSStackFrame*) obj->getPrivate();
if (cfp) {
if (shape->getterOp() == js_GetCallArg) {
if (shape->getterOp() == GetCallArg) {
JS_ASSERT(slot < cfp->numFormalArgs());
vp = &cfp->formalArg(slot);
nr.v = *vp;
} else if (shape->getterOp() == js_GetCallVar ||
shape->getterOp() == js_GetCallVarChecked) {
} else if (shape->getterOp() == GetCallVar ||
shape->getterOp() == GetCallVarChecked) {
JS_ASSERT(slot < cfp->numSlots());
vp = &cfp->slots()[slot];
nr.v = *vp;
@ -8100,11 +8100,11 @@ TraceRecorder::callProp(JSObject* obj, JSProperty* prop, jsid id, Value*& vp,
// object loses its frame it never regains one, on trace we will also
// have a null private in the Call object. So all we need to do is
// write the value to the Call object's slot.
if (shape->getterOp() == js_GetCallArg) {
if (shape->getterOp() == GetCallArg) {
JS_ASSERT(slot < ArgClosureTraits::slot_count(obj));
slot += ArgClosureTraits::slot_offset(obj);
} else if (shape->getterOp() == js_GetCallVar ||
shape->getterOp() == js_GetCallVarChecked) {
} else if (shape->getterOp() == GetCallVar ||
shape->getterOp() == GetCallVarChecked) {
JS_ASSERT(slot < VarClosureTraits::slot_count(obj));
slot += VarClosureTraits::slot_offset(obj);
} else {
@ -8137,10 +8137,10 @@ TraceRecorder::callProp(JSObject* obj, JSProperty* prop, jsid id, Value*& vp,
cx_ins
};
const CallInfo* ci;
if (shape->getterOp() == js_GetCallArg) {
if (shape->getterOp() == GetCallArg) {
ci = &GetClosureArg_ci;
} else if (shape->getterOp() == js_GetCallVar ||
shape->getterOp() == js_GetCallVarChecked) {
} else if (shape->getterOp() == GetCallVar ||
shape->getterOp() == GetCallVarChecked) {
ci = &GetClosureVar_ci;
} else {
RETURN_STOP("dynamic property of Call object");

Просмотреть файл

@ -1329,9 +1329,9 @@ class ScopeNameCompiler : public PICStubCompiler
CallObjPropKind kind;
const Shape *shape = getprop.shape;
if (shape->getterOp() == js_GetCallArg) {
if (shape->getterOp() == GetCallArg) {
kind = ARG;
} else if (shape->getterOp() == js_GetCallVar) {
} else if (shape->getterOp() == GetCallVar) {
kind = VAR;
} else {
return disable("unhandled callobj sprop getter");