Commit graph

259 commits

Author SHA1 Message Date
Andreas Kling
1eafaf67fe LibJS: Add a new EnterScope bytecode instruction
This is intended to perform the same duties as enter_scope() does in
the AST tree-walk interpreter:

- Hoisted function declaration processing
- Hoisted variable declaration processing
- ... maybe more

This first cut only implements the function declaration processing.
2021-06-07 18:11:59 +02:00
Andreas Kling
32561bb90d LibJS: Add GetById bytecode instruction for object property retrieval
Same as PutById but in the other direction. :^)
2021-06-07 18:11:59 +02:00
Andreas Kling
14cfc44855 LibJS: Add PutById bytecode instruction for object property assignment
Note that this is only used for non-computed accesses. Computed access
is not yet implemented. :^)
2021-06-07 18:11:59 +02:00
Andreas Kling
bea6e31ddc LibJS: Add a NewObject bytecode instruction for ObjectExpression :^) 2021-06-07 18:11:59 +02:00
Andreas Kling
f2863b5a89 LibJS: Generate bytecode for do...while statements :^)
This was quite straightforward using the same label/jump machinery that
we added for while statements.

The main addition here is a new JumpIfTrue bytecode instruction.
2021-06-07 18:11:59 +02:00
Andreas Kling
bd1a5e282a LibJS: Add AbstractInequals bytecode instruction :^) 2021-06-07 18:11:59 +02:00
Andreas Kling
6ae9346cd3 LibJS: Add basic support for while loops in the bytecode engine
This introduces two new instructions: Jump and JumpIfFalse.
Jumps are made to a Bytecode::Label, which is a simple object that
represents a location in the bytecode stream.

Note that you may not always know the target of a jump when adding the
jump instruction itself, but we can just update the instruction later
on during codegen once we know where the jump target is.

The Bytecode::Interpreter now implements jumping via a jump slot that
gets checked after each instruction to see if a jump is pending.
If not, we just increment the PC as usual.
2021-06-07 18:11:59 +02:00
Andreas Kling
91640d0727 LibJS: Add LessThan bytecode instruction :^) 2021-06-07 18:11:59 +02:00
Andreas Kling
0553e0b048 LibJS: Move AST bytecode generation virtuals to separate cpp file
This will hopefully make it a bit more pleasant to edit this, as things
will just get larger and larger.
2021-06-07 18:11:59 +02:00