Resolved branch targets

This commit is contained in:
rogerl%netscape.com 2000-04-06 00:04:11 +00:00
parent bb3c0f54a0
commit a43377758b
4 changed files with 22 additions and 4 deletions

View File

@ -45,7 +45,16 @@ namespace JavaScript {
ASSERT((*i)->itsOffset >= 0);
ASSERT((*i)->itsOffset < iCode->size());
}
#endif
#endif
for (InstructionIterator ii = iCode->begin(); ii != iCode->end(); ii++) {
if ((*ii)->itsOp == BRANCH)
static_cast<Branch *>(*ii)->itsOperand1 = labels[static_cast<Branch *>(*ii)->itsOperand1]->itsOffset;
else
if ((*ii)->itsOp == BRANCH_COND)
static_cast<BranchCond *>(*ii)->itsOperand1 = labels[static_cast<BranchCond *>(*ii)->itsOperand1]->itsOffset;
}
return iCode;
}

View File

@ -38,7 +38,7 @@ JSValue interpret(InstructionStream& iCode, const JSValues& args)
for (InstructionIterator pc = iCode.begin(); pc != iCode.end(); ++pc) {
Instruction* instruction = *pc;
switch (instruction->opcode()) {
case LOAD_NAME:
case LOAD_NAME:
{
LoadName* i = static_cast<LoadName*>(instruction);
registers[op2(i)] = globals[*op1(i)];

View File

@ -45,7 +45,16 @@ namespace JavaScript {
ASSERT((*i)->itsOffset >= 0);
ASSERT((*i)->itsOffset < iCode->size());
}
#endif
#endif
for (InstructionIterator ii = iCode->begin(); ii != iCode->end(); ii++) {
if ((*ii)->itsOp == BRANCH)
static_cast<Branch *>(*ii)->itsOperand1 = labels[static_cast<Branch *>(*ii)->itsOperand1]->itsOffset;
else
if ((*ii)->itsOp == BRANCH_COND)
static_cast<BranchCond *>(*ii)->itsOperand1 = labels[static_cast<BranchCond *>(*ii)->itsOperand1]->itsOffset;
}
return iCode;
}

View File

@ -38,7 +38,7 @@ JSValue interpret(InstructionStream& iCode, const JSValues& args)
for (InstructionIterator pc = iCode.begin(); pc != iCode.end(); ++pc) {
Instruction* instruction = *pc;
switch (instruction->opcode()) {
case LOAD_NAME:
case LOAD_NAME:
{
LoadName* i = static_cast<LoadName*>(instruction);
registers[op2(i)] = globals[*op1(i)];