Implement for-of statement (#205)

* merging for-of and for-in statement
* remove unnecessary bytecodes

Signed-off-by: HyukWoo Park <hyukwoo.park@samsung.com>
This commit is contained in:
Hyukwoo Park 2019-04-23 15:29:40 +09:00 committed by yichoi
commit 8850b0103f
9 changed files with 332 additions and 138 deletions

View file

@ -1066,6 +1066,32 @@ Value ByteCodeInterpreter::interpret(ExecutionState& state, ByteCodeBlock* byteC
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(GetIterator)
:
{
GetIterator* code = (GetIterator*)programCounter;
Value obj = registerFile[code->m_objectRegisterIndex];
registerFile[code->m_registerIndex] = getIterator(state, obj);
ADD_PROGRAM_COUNTER(GetIterator);
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(IteratorStep)
:
{
IteratorStep* code = (IteratorStep*)programCounter;
Value iterator = registerFile[code->m_iterRegisterIndex];
Value nextResult = iteratorStep(state, iterator);
if (nextResult.isFalse()) {
programCounter = jumpTo(codeBuffer, code->m_forOfEndPosition);
} else {
registerFile[code->m_registerIndex] = iteratorValue(state, nextResult);
ADD_PROGRAM_COUNTER(IteratorStep);
}
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(LoadRegexp)
:
{