1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 19:58:11 +00:00
serenity/Userland/Libraries/LibJS
Andreas Kling 69dddd4ef5 LibJS: Start fleshing out a bytecode for the JavaScript engine :^)
This patch begins the work of implementing JavaScript execution in a
bytecode VM instead of an AST tree-walk interpreter.

It's probably quite naive, but we have to start somewhere.

The basic idea is that you call Bytecode::Generator::generate() on an
AST node and it hands you back a Bytecode::Block filled with
instructions that can then be interpreted by a Bytecode::Interpreter.

This first version only implements two instructions: Load and Add. :^)

Each bytecode block has infinity registers, and the interpreter resizes
its register file to fit the block being executed.

Two new `js` options are added in this patch as well:

`-d` will dump the generated bytecode
`-b` will execute the generated bytecode

Note that unless `-d` and/or `-b` are specified, none of the bytecode
related stuff in LibJS runs at all. This is implemented in parallel
with the existing AST interpreter. :^)
2021-06-07 18:11:59 +02:00
..
Bytecode LibJS: Start fleshing out a bytecode for the JavaScript engine :^) 2021-06-07 18:11:59 +02:00
Heap LibJS: Add dbgln() to Heap::allocator_for_size() before crashing 2021-06-06 23:08:15 +01:00
Runtime LibJS: Use ToPropertyKey in Object.getOwnPropertyDescriptor 2021-06-07 16:51:09 +01:00
Tests LibJS: Add Date.prototype.setTime() 2021-06-06 19:14:11 +01:00
AST.cpp LibJS: Start fleshing out a bytecode for the JavaScript engine :^) 2021-06-07 18:11:59 +02:00
AST.h LibJS: Start fleshing out a bytecode for the JavaScript engine :^) 2021-06-07 18:11:59 +02:00
CMakeLists.txt LibJS: Start fleshing out a bytecode for the JavaScript engine :^) 2021-06-07 18:11:59 +02:00
Console.cpp Everywhere: Use linusg@serenityos.org for my copyright headers 2021-04-22 22:51:19 +02:00
Console.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Forward.h LibJS: Start fleshing out a bytecode for the JavaScript engine :^) 2021-06-07 18:11:59 +02:00
Interpreter.cpp LibJS: Implement destructuring assignments and function parameters 2021-05-29 23:02:23 +04:30
Interpreter.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Lexer.cpp Everywhere: Use s.unverwerth@serenityos.org :^) 2021-05-29 12:30:08 +01:00
Lexer.h Everywhere: Use s.unverwerth@serenityos.org :^) 2021-05-29 12:30:08 +01:00
MarkupGenerator.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
MarkupGenerator.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Parser.cpp AK+LibWasm+LibJS: Disallow Variant.has() on types that aren't contained 2021-06-02 18:02:47 +02:00
Parser.h LibJS: Implement destructuring assignments and function parameters 2021-05-29 23:02:23 +04:30
SourceRange.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
SyntaxHighlighter.cpp LibWeb+LibSyntax: Implement nested syntax highlighters 2021-06-07 14:45:49 +04:30
SyntaxHighlighter.h LibWeb+LibSyntax: Implement nested syntax highlighters 2021-06-07 14:45:49 +04:30
Token.cpp Everywhere: Use s.unverwerth@serenityos.org :^) 2021-05-29 12:30:08 +01:00
Token.h Everywhere: Use s.unverwerth@serenityos.org :^) 2021-05-29 12:30:08 +01:00