mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 994937 - remove some JSOP_CALL opcodes (r=djvj)
--HG-- extra : rebase_source : 8859238bb98fe91f6c7bbb99d3eab3fee6936b69
This commit is contained in:
parent
f1f536a756
commit
298c0cefa8
@ -1237,7 +1237,6 @@ EmitVarOp(ExclusiveContext *cx, ParseNode *pn, JSOp op, BytecodeEmitter *bce)
|
|||||||
switch (op) {
|
switch (op) {
|
||||||
case JSOP_GETARG: case JSOP_GETLOCAL: op = JSOP_GETALIASEDVAR; break;
|
case JSOP_GETARG: case JSOP_GETLOCAL: op = JSOP_GETALIASEDVAR; break;
|
||||||
case JSOP_SETARG: case JSOP_SETLOCAL: op = JSOP_SETALIASEDVAR; break;
|
case JSOP_SETARG: case JSOP_SETLOCAL: op = JSOP_SETALIASEDVAR; break;
|
||||||
case JSOP_CALLARG: case JSOP_CALLLOCAL: op = JSOP_CALLALIASEDVAR; break;
|
|
||||||
default: MOZ_ASSUME_UNREACHABLE("unexpected var op");
|
default: MOZ_ASSUME_UNREACHABLE("unexpected var op");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2131,37 +2130,10 @@ EmitFinishIteratorResult(ExclusiveContext *cx, BytecodeEmitter *bce, bool done)
|
|||||||
static bool
|
static bool
|
||||||
EmitNameOp(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, bool callContext)
|
EmitNameOp(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, bool callContext)
|
||||||
{
|
{
|
||||||
JSOp op;
|
|
||||||
|
|
||||||
if (!BindNameToSlot(cx, bce, pn))
|
if (!BindNameToSlot(cx, bce, pn))
|
||||||
return false;
|
return false;
|
||||||
op = pn->getOp();
|
|
||||||
|
|
||||||
if (callContext) {
|
JSOp op = pn->getOp();
|
||||||
switch (op) {
|
|
||||||
case JSOP_NAME:
|
|
||||||
op = JSOP_CALLNAME;
|
|
||||||
break;
|
|
||||||
case JSOP_GETINTRINSIC:
|
|
||||||
op = JSOP_CALLINTRINSIC;
|
|
||||||
break;
|
|
||||||
case JSOP_GETGNAME:
|
|
||||||
op = JSOP_CALLGNAME;
|
|
||||||
break;
|
|
||||||
case JSOP_GETARG:
|
|
||||||
op = JSOP_CALLARG;
|
|
||||||
break;
|
|
||||||
case JSOP_GETLOCAL:
|
|
||||||
op = JSOP_CALLLOCAL;
|
|
||||||
break;
|
|
||||||
case JSOP_GETALIASEDVAR:
|
|
||||||
op = JSOP_CALLALIASEDVAR;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
JS_ASSERT(op == JSOP_CALLEE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (op == JSOP_CALLEE) {
|
if (op == JSOP_CALLEE) {
|
||||||
if (Emit1(cx, bce, op) < 0)
|
if (Emit1(cx, bce, op) < 0)
|
||||||
@ -2179,7 +2151,7 @@ EmitNameOp(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, bool callC
|
|||||||
|
|
||||||
/* Need to provide |this| value for call */
|
/* Need to provide |this| value for call */
|
||||||
if (callContext) {
|
if (callContext) {
|
||||||
if (op == JSOP_CALLNAME && bce->needsImplicitThis()) {
|
if (op == JSOP_NAME && bce->needsImplicitThis()) {
|
||||||
if (!EmitAtomOp(cx, pn, JSOP_IMPLICITTHIS, bce))
|
if (!EmitAtomOp(cx, pn, JSOP_IMPLICITTHIS, bce))
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -151,7 +151,7 @@ struct BytecodeEmitter
|
|||||||
Normal,
|
Normal,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Emit JSOP_CALLINTRINSIC instead of JSOP_NAME and assert that
|
* Emit JSOP_GETINTRINSIC instead of JSOP_NAME and assert that
|
||||||
* JSOP_NAME and JSOP_*GNAME don't ever get emitted. See the comment
|
* JSOP_NAME and JSOP_*GNAME don't ever get emitted. See the comment
|
||||||
* for the field |selfHostingMode| in Parser.h for details.
|
* for the field |selfHostingMode| in Parser.h for details.
|
||||||
*/
|
*/
|
||||||
|
@ -1915,12 +1915,6 @@ BaselineCompiler::emit_JSOP_GETGNAME()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
BaselineCompiler::emit_JSOP_CALLGNAME()
|
|
||||||
{
|
|
||||||
return emit_JSOP_GETGNAME();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BaselineCompiler::emit_JSOP_BINDGNAME()
|
BaselineCompiler::emit_JSOP_BINDGNAME()
|
||||||
{
|
{
|
||||||
@ -2063,12 +2057,6 @@ BaselineCompiler::emit_JSOP_GETALIASEDVAR()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
BaselineCompiler::emit_JSOP_CALLALIASEDVAR()
|
|
||||||
{
|
|
||||||
return emit_JSOP_GETALIASEDVAR();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BaselineCompiler::emit_JSOP_SETALIASEDVAR()
|
BaselineCompiler::emit_JSOP_SETALIASEDVAR()
|
||||||
{
|
{
|
||||||
@ -2143,12 +2131,6 @@ BaselineCompiler::emit_JSOP_NAME()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
BaselineCompiler::emit_JSOP_CALLNAME()
|
|
||||||
{
|
|
||||||
return emit_JSOP_NAME();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BaselineCompiler::emit_JSOP_BINDNAME()
|
BaselineCompiler::emit_JSOP_BINDNAME()
|
||||||
{
|
{
|
||||||
@ -2201,12 +2183,6 @@ BaselineCompiler::emit_JSOP_GETINTRINSIC()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
BaselineCompiler::emit_JSOP_CALLINTRINSIC()
|
|
||||||
{
|
|
||||||
return emit_JSOP_GETINTRINSIC();
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef bool (*DefVarOrConstFn)(JSContext *, HandlePropertyName, unsigned, HandleObject);
|
typedef bool (*DefVarOrConstFn)(JSContext *, HandlePropertyName, unsigned, HandleObject);
|
||||||
static const VMFunction DefVarOrConstInfo = FunctionInfo<DefVarOrConstFn>(DefVarOrConst);
|
static const VMFunction DefVarOrConstInfo = FunctionInfo<DefVarOrConstFn>(DefVarOrConst);
|
||||||
|
|
||||||
@ -2374,12 +2350,6 @@ BaselineCompiler::emit_JSOP_GETLOCAL()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
BaselineCompiler::emit_JSOP_CALLLOCAL()
|
|
||||||
{
|
|
||||||
return emit_JSOP_GETLOCAL();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BaselineCompiler::emit_JSOP_SETLOCAL()
|
BaselineCompiler::emit_JSOP_SETLOCAL()
|
||||||
{
|
{
|
||||||
@ -2474,12 +2444,6 @@ BaselineCompiler::emit_JSOP_GETARG()
|
|||||||
return emitFormalArgAccess(arg, /* get = */ true);
|
return emitFormalArgAccess(arg, /* get = */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
BaselineCompiler::emit_JSOP_CALLARG()
|
|
||||||
{
|
|
||||||
return emit_JSOP_GETARG();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BaselineCompiler::emit_JSOP_SETARG()
|
BaselineCompiler::emit_JSOP_SETARG()
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,6 @@ namespace jit {
|
|||||||
_(JSOP_DELELEM) \
|
_(JSOP_DELELEM) \
|
||||||
_(JSOP_IN) \
|
_(JSOP_IN) \
|
||||||
_(JSOP_GETGNAME) \
|
_(JSOP_GETGNAME) \
|
||||||
_(JSOP_CALLGNAME) \
|
|
||||||
_(JSOP_BINDGNAME) \
|
_(JSOP_BINDGNAME) \
|
||||||
_(JSOP_SETGNAME) \
|
_(JSOP_SETGNAME) \
|
||||||
_(JSOP_SETNAME) \
|
_(JSOP_SETNAME) \
|
||||||
@ -116,23 +115,18 @@ namespace jit {
|
|||||||
_(JSOP_LENGTH) \
|
_(JSOP_LENGTH) \
|
||||||
_(JSOP_GETXPROP) \
|
_(JSOP_GETXPROP) \
|
||||||
_(JSOP_GETALIASEDVAR) \
|
_(JSOP_GETALIASEDVAR) \
|
||||||
_(JSOP_CALLALIASEDVAR) \
|
|
||||||
_(JSOP_SETALIASEDVAR) \
|
_(JSOP_SETALIASEDVAR) \
|
||||||
_(JSOP_NAME) \
|
_(JSOP_NAME) \
|
||||||
_(JSOP_CALLNAME) \
|
|
||||||
_(JSOP_BINDNAME) \
|
_(JSOP_BINDNAME) \
|
||||||
_(JSOP_DELNAME) \
|
_(JSOP_DELNAME) \
|
||||||
_(JSOP_GETINTRINSIC) \
|
_(JSOP_GETINTRINSIC) \
|
||||||
_(JSOP_CALLINTRINSIC) \
|
|
||||||
_(JSOP_DEFVAR) \
|
_(JSOP_DEFVAR) \
|
||||||
_(JSOP_DEFCONST) \
|
_(JSOP_DEFCONST) \
|
||||||
_(JSOP_SETCONST) \
|
_(JSOP_SETCONST) \
|
||||||
_(JSOP_DEFFUN) \
|
_(JSOP_DEFFUN) \
|
||||||
_(JSOP_GETLOCAL) \
|
_(JSOP_GETLOCAL) \
|
||||||
_(JSOP_CALLLOCAL) \
|
|
||||||
_(JSOP_SETLOCAL) \
|
_(JSOP_SETLOCAL) \
|
||||||
_(JSOP_GETARG) \
|
_(JSOP_GETARG) \
|
||||||
_(JSOP_CALLARG) \
|
|
||||||
_(JSOP_SETARG) \
|
_(JSOP_SETARG) \
|
||||||
_(JSOP_CALL) \
|
_(JSOP_CALL) \
|
||||||
_(JSOP_FUNCALL) \
|
_(JSOP_FUNCALL) \
|
||||||
|
@ -5638,10 +5638,6 @@ TryAttachGlobalNameStub(JSContext *cx, HandleScript script, jsbytecode *pc,
|
|||||||
bool isScripted;
|
bool isScripted;
|
||||||
if (IsCacheableGetPropCall(cx, global, global, shape, &isScripted) && !isScripted)
|
if (IsCacheableGetPropCall(cx, global, global, shape, &isScripted) && !isScripted)
|
||||||
{
|
{
|
||||||
#ifdef JS_HAS_NO_SUCH_METHOD
|
|
||||||
if (JSOp(*pc) == JSOP_CALLGNAME)
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
ICStub *monitorStub = stub->fallbackMonitorStub()->firstMonitorStub();
|
ICStub *monitorStub = stub->fallbackMonitorStub()->firstMonitorStub();
|
||||||
IonSpew(IonSpew_BaselineIC, " Generating GetName(GlobalName/NativeGetter) stub");
|
IonSpew(IonSpew_BaselineIC, " Generating GetName(GlobalName/NativeGetter) stub");
|
||||||
RootedFunction getter(cx, &shape->getterObject()->as<JSFunction>());
|
RootedFunction getter(cx, &shape->getterObject()->as<JSFunction>());
|
||||||
@ -5758,7 +5754,7 @@ DoGetNameFallback(JSContext *cx, BaselineFrame *frame, ICGetName_Fallback *stub,
|
|||||||
mozilla::DebugOnly<JSOp> op = JSOp(*pc);
|
mozilla::DebugOnly<JSOp> op = JSOp(*pc);
|
||||||
FallbackICSpew(cx, stub, "GetName(%s)", js_CodeName[JSOp(*pc)]);
|
FallbackICSpew(cx, stub, "GetName(%s)", js_CodeName[JSOp(*pc)]);
|
||||||
|
|
||||||
JS_ASSERT(op == JSOP_NAME || op == JSOP_CALLNAME || op == JSOP_GETGNAME || op == JSOP_CALLGNAME);
|
JS_ASSERT(op == JSOP_NAME || op == JSOP_GETGNAME);
|
||||||
|
|
||||||
RootedPropertyName name(cx, script->getName(pc));
|
RootedPropertyName name(cx, script->getName(pc));
|
||||||
|
|
||||||
@ -5935,7 +5931,7 @@ DoGetIntrinsicFallback(JSContext *cx, BaselineFrame *frame, ICGetIntrinsic_Fallb
|
|||||||
mozilla::DebugOnly<JSOp> op = JSOp(*pc);
|
mozilla::DebugOnly<JSOp> op = JSOp(*pc);
|
||||||
FallbackICSpew(cx, stub, "GetIntrinsic(%s)", js_CodeName[JSOp(*pc)]);
|
FallbackICSpew(cx, stub, "GetIntrinsic(%s)", js_CodeName[JSOp(*pc)]);
|
||||||
|
|
||||||
JS_ASSERT(op == JSOP_GETINTRINSIC || op == JSOP_CALLINTRINSIC);
|
JS_ASSERT(op == JSOP_GETINTRINSIC);
|
||||||
|
|
||||||
if (!GetIntrinsicOperation(cx, pc, res))
|
if (!GetIntrinsicOperation(cx, pc, res))
|
||||||
return false;
|
return false;
|
||||||
|
@ -3732,9 +3732,7 @@ class ICIn_Fallback : public ICFallbackStub
|
|||||||
|
|
||||||
// GetName
|
// GetName
|
||||||
// JSOP_NAME
|
// JSOP_NAME
|
||||||
// JSOP_CALLNAME
|
|
||||||
// JSOP_GETGNAME
|
// JSOP_GETGNAME
|
||||||
// JSOP_CALLGNAME
|
|
||||||
class ICGetName_Fallback : public ICMonitoredFallbackStub
|
class ICGetName_Fallback : public ICMonitoredFallbackStub
|
||||||
{
|
{
|
||||||
friend class ICStubSpace;
|
friend class ICStubSpace;
|
||||||
@ -3930,7 +3928,6 @@ class ICBindName_Fallback : public ICFallbackStub
|
|||||||
|
|
||||||
// GetIntrinsic
|
// GetIntrinsic
|
||||||
// JSOP_GETINTRINSIC
|
// JSOP_GETINTRINSIC
|
||||||
// JSOP_CALLINTRINSIC
|
|
||||||
class ICGetIntrinsic_Fallback : public ICMonitoredFallbackStub
|
class ICGetIntrinsic_Fallback : public ICMonitoredFallbackStub
|
||||||
{
|
{
|
||||||
friend class ICStubSpace;
|
friend class ICStubSpace;
|
||||||
|
@ -148,12 +148,10 @@ BytecodeAnalysis::init(TempAllocator &alloc, GSNCache &gsn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case JSOP_NAME:
|
case JSOP_NAME:
|
||||||
case JSOP_CALLNAME:
|
|
||||||
case JSOP_BINDNAME:
|
case JSOP_BINDNAME:
|
||||||
case JSOP_SETNAME:
|
case JSOP_SETNAME:
|
||||||
case JSOP_DELNAME:
|
case JSOP_DELNAME:
|
||||||
case JSOP_GETALIASEDVAR:
|
case JSOP_GETALIASEDVAR:
|
||||||
case JSOP_CALLALIASEDVAR:
|
|
||||||
case JSOP_SETALIASEDVAR:
|
case JSOP_SETALIASEDVAR:
|
||||||
case JSOP_LAMBDA:
|
case JSOP_LAMBDA:
|
||||||
case JSOP_LAMBDA_ARROW:
|
case JSOP_LAMBDA_ARROW:
|
||||||
|
@ -1480,7 +1480,6 @@ IonBuilder::inspectOpcode(JSOp op)
|
|||||||
return jsop_rest();
|
return jsop_rest();
|
||||||
|
|
||||||
case JSOP_GETARG:
|
case JSOP_GETARG:
|
||||||
case JSOP_CALLARG:
|
|
||||||
if (info().argsObjAliasesFormals()) {
|
if (info().argsObjAliasesFormals()) {
|
||||||
MGetArgumentsObjectArg *getArg = MGetArgumentsObjectArg::New(alloc(),
|
MGetArgumentsObjectArg *getArg = MGetArgumentsObjectArg::New(alloc(),
|
||||||
current->argumentsObject(),
|
current->argumentsObject(),
|
||||||
@ -1496,7 +1495,6 @@ IonBuilder::inspectOpcode(JSOp op)
|
|||||||
return jsop_setarg(GET_ARGNO(pc));
|
return jsop_setarg(GET_ARGNO(pc));
|
||||||
|
|
||||||
case JSOP_GETLOCAL:
|
case JSOP_GETLOCAL:
|
||||||
case JSOP_CALLLOCAL:
|
|
||||||
current->pushLocal(GET_LOCALNO(pc));
|
current->pushLocal(GET_LOCALNO(pc));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -1585,7 +1583,6 @@ IonBuilder::inspectOpcode(JSOp op)
|
|||||||
return pushConstant(Int32Value(GET_UINT16(pc)));
|
return pushConstant(Int32Value(GET_UINT16(pc)));
|
||||||
|
|
||||||
case JSOP_GETGNAME:
|
case JSOP_GETGNAME:
|
||||||
case JSOP_CALLGNAME:
|
|
||||||
{
|
{
|
||||||
PropertyName *name = info().getAtom(pc)->asPropertyName();
|
PropertyName *name = info().getAtom(pc)->asPropertyName();
|
||||||
return jsop_getgname(name);
|
return jsop_getgname(name);
|
||||||
@ -1602,14 +1599,12 @@ IonBuilder::inspectOpcode(JSOp op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case JSOP_NAME:
|
case JSOP_NAME:
|
||||||
case JSOP_CALLNAME:
|
|
||||||
{
|
{
|
||||||
PropertyName *name = info().getAtom(pc)->asPropertyName();
|
PropertyName *name = info().getAtom(pc)->asPropertyName();
|
||||||
return jsop_getname(name);
|
return jsop_getname(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
case JSOP_GETINTRINSIC:
|
case JSOP_GETINTRINSIC:
|
||||||
case JSOP_CALLINTRINSIC:
|
|
||||||
{
|
{
|
||||||
PropertyName *name = info().getAtom(pc)->asPropertyName();
|
PropertyName *name = info().getAtom(pc)->asPropertyName();
|
||||||
return jsop_intrinsic(name);
|
return jsop_intrinsic(name);
|
||||||
@ -1634,7 +1629,6 @@ IonBuilder::inspectOpcode(JSOp op)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case JSOP_GETALIASEDVAR:
|
case JSOP_GETALIASEDVAR:
|
||||||
case JSOP_CALLALIASEDVAR:
|
|
||||||
return jsop_getaliasedvar(ScopeCoordinate(pc));
|
return jsop_getaliasedvar(ScopeCoordinate(pc));
|
||||||
|
|
||||||
case JSOP_SETALIASEDVAR:
|
case JSOP_SETALIASEDVAR:
|
||||||
|
@ -517,9 +517,7 @@ ExtendedUse(jsbytecode *pc)
|
|||||||
return true;
|
return true;
|
||||||
switch ((JSOp)*pc) {
|
switch ((JSOp)*pc) {
|
||||||
case JSOP_GETARG:
|
case JSOP_GETARG:
|
||||||
case JSOP_CALLARG:
|
|
||||||
case JSOP_GETLOCAL:
|
case JSOP_GETLOCAL:
|
||||||
case JSOP_CALLLOCAL:
|
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@ -554,12 +552,10 @@ static inline uint32_t GetBytecodeSlot(JSScript *script, jsbytecode *pc)
|
|||||||
switch (JSOp(*pc)) {
|
switch (JSOp(*pc)) {
|
||||||
|
|
||||||
case JSOP_GETARG:
|
case JSOP_GETARG:
|
||||||
case JSOP_CALLARG:
|
|
||||||
case JSOP_SETARG:
|
case JSOP_SETARG:
|
||||||
return ArgSlot(GET_ARGNO(pc));
|
return ArgSlot(GET_ARGNO(pc));
|
||||||
|
|
||||||
case JSOP_GETLOCAL:
|
case JSOP_GETLOCAL:
|
||||||
case JSOP_CALLLOCAL:
|
|
||||||
case JSOP_SETLOCAL:
|
case JSOP_SETLOCAL:
|
||||||
return LocalSlot(script, GET_LOCALNO(pc));
|
return LocalSlot(script, GET_LOCALNO(pc));
|
||||||
|
|
||||||
@ -928,7 +924,6 @@ ScriptAnalysis::analyzeBytecode(JSContext *cx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case JSOP_GETLOCAL:
|
case JSOP_GETLOCAL:
|
||||||
case JSOP_CALLLOCAL:
|
|
||||||
case JSOP_SETLOCAL:
|
case JSOP_SETLOCAL:
|
||||||
JS_ASSERT(GET_LOCALNO(pc) < script_->nfixed());
|
JS_ASSERT(GET_LOCALNO(pc) < script_->nfixed());
|
||||||
break;
|
break;
|
||||||
@ -1091,9 +1086,7 @@ ScriptAnalysis::analyzeLifetimes(JSContext *cx)
|
|||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case JSOP_GETARG:
|
case JSOP_GETARG:
|
||||||
case JSOP_CALLARG:
|
|
||||||
case JSOP_GETLOCAL:
|
case JSOP_GETLOCAL:
|
||||||
case JSOP_CALLLOCAL:
|
|
||||||
case JSOP_THIS: {
|
case JSOP_THIS: {
|
||||||
uint32_t slot = GetBytecodeSlot(script_, pc);
|
uint32_t slot = GetBytecodeSlot(script_, pc);
|
||||||
if (!slotEscapes(slot)) {
|
if (!slotEscapes(slot)) {
|
||||||
|
@ -1498,26 +1498,20 @@ ExpressionDecompiler::decompilePC(jsbytecode *pc)
|
|||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case JSOP_GETGNAME:
|
case JSOP_GETGNAME:
|
||||||
case JSOP_CALLGNAME:
|
|
||||||
case JSOP_NAME:
|
case JSOP_NAME:
|
||||||
case JSOP_CALLNAME:
|
|
||||||
case JSOP_GETINTRINSIC:
|
case JSOP_GETINTRINSIC:
|
||||||
case JSOP_CALLINTRINSIC:
|
|
||||||
return write(loadAtom(pc));
|
return write(loadAtom(pc));
|
||||||
case JSOP_GETARG:
|
case JSOP_GETARG: {
|
||||||
case JSOP_CALLARG: {
|
|
||||||
unsigned slot = GET_ARGNO(pc);
|
unsigned slot = GET_ARGNO(pc);
|
||||||
JSAtom *atom = getArg(slot);
|
JSAtom *atom = getArg(slot);
|
||||||
return write(atom);
|
return write(atom);
|
||||||
}
|
}
|
||||||
case JSOP_GETLOCAL:
|
case JSOP_GETLOCAL: {
|
||||||
case JSOP_CALLLOCAL: {
|
|
||||||
uint32_t i = GET_LOCALNO(pc);
|
uint32_t i = GET_LOCALNO(pc);
|
||||||
if (JSAtom *atom = getLocal(i, pc))
|
if (JSAtom *atom = getLocal(i, pc))
|
||||||
return write(atom);
|
return write(atom);
|
||||||
return write("(intermediate value)");
|
return write("(intermediate value)");
|
||||||
}
|
}
|
||||||
case JSOP_CALLALIASEDVAR:
|
|
||||||
case JSOP_GETALIASEDVAR: {
|
case JSOP_GETALIASEDVAR: {
|
||||||
JSAtom *atom = ScopeCoordinateName(cx->runtime()->scopeCoordinateNameCache, script, pc);
|
JSAtom *atom = ScopeCoordinateName(cx->runtime()->scopeCoordinateNameCache, script, pc);
|
||||||
JS_ASSERT(atom);
|
JS_ASSERT(atom);
|
||||||
|
@ -1103,14 +1103,6 @@ HandleError(JSContext *cx, InterpreterRegs ®s)
|
|||||||
goto error; \
|
goto error; \
|
||||||
JS_END_MACRO
|
JS_END_MACRO
|
||||||
|
|
||||||
/*
|
|
||||||
* Ensure that the interpreter switch can close call-bytecode cases in the
|
|
||||||
* same way as non-call bytecodes.
|
|
||||||
*/
|
|
||||||
JS_STATIC_ASSERT(JSOP_NAME_LENGTH == JSOP_CALLNAME_LENGTH);
|
|
||||||
JS_STATIC_ASSERT(JSOP_GETARG_LENGTH == JSOP_CALLARG_LENGTH);
|
|
||||||
JS_STATIC_ASSERT(JSOP_GETLOCAL_LENGTH == JSOP_CALLLOCAL_LENGTH);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Same for JSOP_SETNAME and JSOP_SETPROP, which differ only slightly but
|
* Same for JSOP_SETNAME and JSOP_SETPROP, which differ only slightly but
|
||||||
* remain distinct for the decompiler.
|
* remain distinct for the decompiler.
|
||||||
@ -1626,6 +1618,7 @@ CASE(JSOP_UNUSED49)
|
|||||||
CASE(JSOP_UNUSED50)
|
CASE(JSOP_UNUSED50)
|
||||||
CASE(JSOP_UNUSED51)
|
CASE(JSOP_UNUSED51)
|
||||||
CASE(JSOP_UNUSED52)
|
CASE(JSOP_UNUSED52)
|
||||||
|
CASE(JSOP_UNUSED57)
|
||||||
CASE(JSOP_UNUSED101)
|
CASE(JSOP_UNUSED101)
|
||||||
CASE(JSOP_UNUSED102)
|
CASE(JSOP_UNUSED102)
|
||||||
CASE(JSOP_UNUSED103)
|
CASE(JSOP_UNUSED103)
|
||||||
@ -1635,10 +1628,12 @@ CASE(JSOP_UNUSED107)
|
|||||||
CASE(JSOP_UNUSED124)
|
CASE(JSOP_UNUSED124)
|
||||||
CASE(JSOP_UNUSED125)
|
CASE(JSOP_UNUSED125)
|
||||||
CASE(JSOP_UNUSED126)
|
CASE(JSOP_UNUSED126)
|
||||||
|
CASE(JSOP_UNUSED138)
|
||||||
CASE(JSOP_UNUSED139)
|
CASE(JSOP_UNUSED139)
|
||||||
CASE(JSOP_UNUSED140)
|
CASE(JSOP_UNUSED140)
|
||||||
CASE(JSOP_UNUSED141)
|
CASE(JSOP_UNUSED141)
|
||||||
CASE(JSOP_UNUSED142)
|
CASE(JSOP_UNUSED142)
|
||||||
|
CASE(JSOP_UNUSED146)
|
||||||
CASE(JSOP_UNUSED147)
|
CASE(JSOP_UNUSED147)
|
||||||
CASE(JSOP_UNUSED148)
|
CASE(JSOP_UNUSED148)
|
||||||
CASE(JSOP_BACKPATCH)
|
CASE(JSOP_BACKPATCH)
|
||||||
@ -1685,6 +1680,9 @@ CASE(JSOP_UNUSED207)
|
|||||||
CASE(JSOP_UNUSED208)
|
CASE(JSOP_UNUSED208)
|
||||||
CASE(JSOP_UNUSED209)
|
CASE(JSOP_UNUSED209)
|
||||||
CASE(JSOP_UNUSED210)
|
CASE(JSOP_UNUSED210)
|
||||||
|
CASE(JSOP_UNUSED211)
|
||||||
|
CASE(JSOP_UNUSED212)
|
||||||
|
CASE(JSOP_UNUSED213)
|
||||||
CASE(JSOP_UNUSED219)
|
CASE(JSOP_UNUSED219)
|
||||||
CASE(JSOP_UNUSED220)
|
CASE(JSOP_UNUSED220)
|
||||||
CASE(JSOP_UNUSED221)
|
CASE(JSOP_UNUSED221)
|
||||||
@ -2729,9 +2727,7 @@ CASE(JSOP_IMPLICITTHIS)
|
|||||||
END_CASE(JSOP_IMPLICITTHIS)
|
END_CASE(JSOP_IMPLICITTHIS)
|
||||||
|
|
||||||
CASE(JSOP_GETGNAME)
|
CASE(JSOP_GETGNAME)
|
||||||
CASE(JSOP_CALLGNAME)
|
|
||||||
CASE(JSOP_NAME)
|
CASE(JSOP_NAME)
|
||||||
CASE(JSOP_CALLNAME)
|
|
||||||
{
|
{
|
||||||
RootedValue &rval = rootValue0;
|
RootedValue &rval = rootValue0;
|
||||||
|
|
||||||
@ -2744,7 +2740,6 @@ CASE(JSOP_CALLNAME)
|
|||||||
END_CASE(JSOP_NAME)
|
END_CASE(JSOP_NAME)
|
||||||
|
|
||||||
CASE(JSOP_GETINTRINSIC)
|
CASE(JSOP_GETINTRINSIC)
|
||||||
CASE(JSOP_CALLINTRINSIC)
|
|
||||||
{
|
{
|
||||||
RootedValue &rval = rootValue0;
|
RootedValue &rval = rootValue0;
|
||||||
|
|
||||||
@ -2899,7 +2894,6 @@ CASE(JSOP_REST)
|
|||||||
}
|
}
|
||||||
END_CASE(JSOP_REST)
|
END_CASE(JSOP_REST)
|
||||||
|
|
||||||
CASE(JSOP_CALLALIASEDVAR)
|
|
||||||
CASE(JSOP_GETALIASEDVAR)
|
CASE(JSOP_GETALIASEDVAR)
|
||||||
{
|
{
|
||||||
ScopeCoordinate sc = ScopeCoordinate(REGS.pc);
|
ScopeCoordinate sc = ScopeCoordinate(REGS.pc);
|
||||||
@ -2924,7 +2918,6 @@ CASE(JSOP_SETALIASEDVAR)
|
|||||||
END_CASE(JSOP_SETALIASEDVAR)
|
END_CASE(JSOP_SETALIASEDVAR)
|
||||||
|
|
||||||
CASE(JSOP_GETARG)
|
CASE(JSOP_GETARG)
|
||||||
CASE(JSOP_CALLARG)
|
|
||||||
{
|
{
|
||||||
unsigned i = GET_ARGNO(REGS.pc);
|
unsigned i = GET_ARGNO(REGS.pc);
|
||||||
if (script->argsObjAliasesFormals())
|
if (script->argsObjAliasesFormals())
|
||||||
@ -2945,7 +2938,6 @@ CASE(JSOP_SETARG)
|
|||||||
END_CASE(JSOP_SETARG)
|
END_CASE(JSOP_SETARG)
|
||||||
|
|
||||||
CASE(JSOP_GETLOCAL)
|
CASE(JSOP_GETLOCAL)
|
||||||
CASE(JSOP_CALLLOCAL)
|
|
||||||
{
|
{
|
||||||
uint32_t i = GET_LOCALNO(REGS.pc);
|
uint32_t i = GET_LOCALNO(REGS.pc);
|
||||||
PUSH_COPY_SKIP_CHECK(REGS.fp()->unaliasedLocal(i));
|
PUSH_COPY_SKIP_CHECK(REGS.fp()->unaliasedLocal(i));
|
||||||
|
@ -160,7 +160,7 @@
|
|||||||
macro(JSOP_SETPROP, 54, "setprop", NULL, 5, 2, 1, JOF_ATOM|JOF_PROP|JOF_SET|JOF_DETECTING|JOF_TMPSLOT) \
|
macro(JSOP_SETPROP, 54, "setprop", NULL, 5, 2, 1, JOF_ATOM|JOF_PROP|JOF_SET|JOF_DETECTING|JOF_TMPSLOT) \
|
||||||
macro(JSOP_GETELEM, 55, "getelem", NULL, 1, 2, 1, JOF_BYTE |JOF_ELEM|JOF_TYPESET|JOF_LEFTASSOC) \
|
macro(JSOP_GETELEM, 55, "getelem", NULL, 1, 2, 1, JOF_BYTE |JOF_ELEM|JOF_TYPESET|JOF_LEFTASSOC) \
|
||||||
macro(JSOP_SETELEM, 56, "setelem", NULL, 1, 3, 1, JOF_BYTE |JOF_ELEM|JOF_SET|JOF_DETECTING) \
|
macro(JSOP_SETELEM, 56, "setelem", NULL, 1, 3, 1, JOF_BYTE |JOF_ELEM|JOF_SET|JOF_DETECTING) \
|
||||||
macro(JSOP_CALLNAME, 57, "callname", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET) \
|
macro(JSOP_UNUSED57, 57, "unused57", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_CALL, 58, "call", NULL, 3, -1, 1, JOF_UINT16|JOF_INVOKE|JOF_TYPESET) \
|
macro(JSOP_CALL, 58, "call", NULL, 3, -1, 1, JOF_UINT16|JOF_INVOKE|JOF_TYPESET) \
|
||||||
macro(JSOP_NAME, 59, "name", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET) \
|
macro(JSOP_NAME, 59, "name", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET) \
|
||||||
macro(JSOP_DOUBLE, 60, "double", NULL, 5, 0, 1, JOF_DOUBLE) \
|
macro(JSOP_DOUBLE, 60, "double", NULL, 5, 0, 1, JOF_DOUBLE) \
|
||||||
@ -359,10 +359,10 @@
|
|||||||
* uint24 slot: the slot containing the variable in the ScopeObject (this
|
* uint24 slot: the slot containing the variable in the ScopeObject (this
|
||||||
* 'slot' does not include RESERVED_SLOTS).
|
* 'slot' does not include RESERVED_SLOTS).
|
||||||
*/ \
|
*/ \
|
||||||
macro(JSOP_GETALIASEDVAR, 136,"getaliasedvar",NULL, 5, 0, 1, JOF_SCOPECOORD|JOF_NAME|JOF_TYPESET) \
|
macro(JSOP_GETALIASEDVAR, 136,"getaliasedvar",NULL, 5, 0, 1, JOF_SCOPECOORD|JOF_NAME|JOF_TYPESET) \
|
||||||
macro(JSOP_CALLALIASEDVAR,137,"callaliasedvar",NULL, 5, 0, 1, JOF_SCOPECOORD|JOF_NAME|JOF_TYPESET) \
|
macro(JSOP_SETALIASEDVAR, 137,"setaliasedvar",NULL, 5, 1, 1, JOF_SCOPECOORD|JOF_NAME|JOF_SET|JOF_DETECTING) \
|
||||||
macro(JSOP_SETALIASEDVAR, 138,"setaliasedvar",NULL, 5, 1, 1, JOF_SCOPECOORD|JOF_NAME|JOF_SET|JOF_DETECTING) \
|
|
||||||
\
|
\
|
||||||
|
macro(JSOP_UNUSED138, 138, "unused138", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED139, 139, "unused139", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED139, 139, "unused139", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED140, 140, "unused140", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED140, 140, "unused140", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED141, 141, "unused141", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED141, 141, "unused141", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
@ -376,11 +376,11 @@
|
|||||||
* intrinsic functions the runtime doesn't give client JS code access to.
|
* intrinsic functions the runtime doesn't give client JS code access to.
|
||||||
*/ \
|
*/ \
|
||||||
macro(JSOP_GETINTRINSIC, 143, "getintrinsic", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET) \
|
macro(JSOP_GETINTRINSIC, 143, "getintrinsic", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET) \
|
||||||
macro(JSOP_CALLINTRINSIC, 144, "callintrinsic", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET) \
|
macro(JSOP_SETINTRINSIC, 144, "setintrinsic", NULL, 5, 2, 1, JOF_ATOM|JOF_NAME|JOF_SET|JOF_DETECTING) \
|
||||||
macro(JSOP_SETINTRINSIC, 145, "setintrinsic", NULL, 5, 2, 1, JOF_ATOM|JOF_NAME|JOF_SET|JOF_DETECTING) \
|
macro(JSOP_BINDINTRINSIC, 145, "bindintrinsic", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_SET) \
|
||||||
macro(JSOP_BINDINTRINSIC, 146, "bindintrinsic", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_SET) \
|
|
||||||
\
|
\
|
||||||
/* Unused. */ \
|
/* Unused. */ \
|
||||||
|
macro(JSOP_UNUSED146, 146,"unused146", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED147, 147,"unused147", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED147, 147,"unused147", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED148, 148,"unused148", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED148, 148,"unused148", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
\
|
\
|
||||||
@ -485,10 +485,9 @@
|
|||||||
macro(JSOP_UNUSED208, 208, "unused208", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED208, 208, "unused208", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED209, 209, "unused209", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED209, 209, "unused209", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_UNUSED210, 210, "unused210", NULL, 1, 0, 0, JOF_BYTE) \
|
macro(JSOP_UNUSED210, 210, "unused210", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
\
|
macro(JSOP_UNUSED211, 211, "unused211", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_CALLGNAME, 211, "callgname", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_TYPESET|JOF_GNAME) \
|
macro(JSOP_UNUSED212, 212, "unused212", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_CALLLOCAL, 212, "calllocal", NULL, 4, 0, 1, JOF_LOCAL|JOF_NAME) \
|
macro(JSOP_UNUSED213, 213, "unused213", NULL, 1, 0, 0, JOF_BYTE) \
|
||||||
macro(JSOP_CALLARG, 213, "callarg", NULL, 3, 0, 1, JOF_QARG |JOF_NAME) \
|
|
||||||
macro(JSOP_BINDGNAME, 214, "bindgname", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_SET|JOF_GNAME) \
|
macro(JSOP_BINDGNAME, 214, "bindgname", NULL, 5, 0, 1, JOF_ATOM|JOF_NAME|JOF_SET|JOF_GNAME) \
|
||||||
\
|
\
|
||||||
/* Opcodes to hold 8-bit and 32-bit immediate integer operands. */ \
|
/* Opcodes to hold 8-bit and 32-bit immediate integer operands. */ \
|
||||||
|
@ -2254,13 +2254,11 @@ RemoveReferencedNames(JSContext *cx, HandleScript script, PropertyNameSet &remai
|
|||||||
|
|
||||||
switch (JSOp(*pc)) {
|
switch (JSOp(*pc)) {
|
||||||
case JSOP_NAME:
|
case JSOP_NAME:
|
||||||
case JSOP_CALLNAME:
|
|
||||||
case JSOP_SETNAME:
|
case JSOP_SETNAME:
|
||||||
name = script->getName(pc);
|
name = script->getName(pc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JSOP_GETALIASEDVAR:
|
case JSOP_GETALIASEDVAR:
|
||||||
case JSOP_CALLALIASEDVAR:
|
|
||||||
case JSOP_SETALIASEDVAR:
|
case JSOP_SETALIASEDVAR:
|
||||||
name = ScopeCoordinateName(cx->runtime()->scopeCoordinateNameCache, script, pc);
|
name = ScopeCoordinateName(cx->runtime()->scopeCoordinateNameCache, script, pc);
|
||||||
break;
|
break;
|
||||||
|
@ -887,8 +887,8 @@ void
|
|||||||
js::FillSelfHostingCompileOptions(CompileOptions &options)
|
js::FillSelfHostingCompileOptions(CompileOptions &options)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* In self-hosting mode, scripts emit JSOP_CALLINTRINSIC instead of
|
* In self-hosting mode, scripts emit JSOP_GETINTRINSIC instead of
|
||||||
* JSOP_NAME or JSOP_GNAME to access unbound variables. JSOP_CALLINTRINSIC
|
* JSOP_NAME or JSOP_GNAME to access unbound variables. JSOP_GETINTRINSIC
|
||||||
* does a name lookup in a special object, whose properties are filled in
|
* does a name lookup in a special object, whose properties are filled in
|
||||||
* lazily upon first access for a given global.
|
* lazily upon first access for a given global.
|
||||||
*
|
*
|
||||||
|
@ -23,7 +23,7 @@ namespace js {
|
|||||||
* and saved versions. If deserialization fails, the data should be
|
* and saved versions. If deserialization fails, the data should be
|
||||||
* invalidated if possible.
|
* invalidated if possible.
|
||||||
*/
|
*/
|
||||||
static const uint32_t XDR_BYTECODE_VERSION = uint32_t(0xb973c0de - 171);
|
static const uint32_t XDR_BYTECODE_VERSION = uint32_t(0xb973c0de - 172);
|
||||||
|
|
||||||
class XDRBuffer {
|
class XDRBuffer {
|
||||||
public:
|
public:
|
||||||
|
Loading…
Reference in New Issue
Block a user