mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
LibJS: Add alternative source-to-bytecode pipeline in Rust
Implement a complete Rust reimplementation of the LibJS frontend: lexer, parser, AST, scope collector, and bytecode code generator. The Rust pipeline is built via Corrosion (CMake-Cargo bridge) and linked into LibJS as a static library. It is gated behind a build flag (ENABLE_RUST, on by default except on Windows) and two runtime environment variables: - LIBJS_CPP: Use the C++ pipeline instead of Rust - LIBJS_COMPARE_PIPELINES=1: Run both pipelines in lockstep, aborting on any difference in AST or bytecode generated. The C++ side communicates with Rust through a C FFI layer (RustIntegration.cpp/h) that passes source text to Rust and receives a populated Executable back via a BytecodeFactory interface.
This commit is contained in:
committed by
Andreas Kling
parent
8bf1d749a1
commit
6cdfbd01a6
Notes:
github-actions[bot]
2026-02-24 08:41:00 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/6cdfbd01a6b Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/8104
@@ -6,9 +6,9 @@ JS bytecode executable ""
|
||||
|
||||
JS bytecode executable "f"
|
||||
[ 0] 0: GetLexicalEnvironment dst:reg4
|
||||
[ 8] CreateVariable identifier:c, is_immutable:false, is_global:false, is_strict:false
|
||||
[ 18] CreateVariable identifier:a, is_immutable:false, is_global:false, is_strict:false
|
||||
[ 28] CreateVariable identifier:b, is_immutable:false, is_global:false, is_strict:false
|
||||
[ 8] CreateVariable identifier:a, is_immutable:false, is_global:false, is_strict:false
|
||||
[ 18] CreateVariable identifier:b, is_immutable:false, is_global:false, is_strict:false
|
||||
[ 28] CreateVariable identifier:c, is_immutable:false, is_global:false, is_strict:false
|
||||
[ 38] InitializeLexicalBinding identifier:a, src:arg0
|
||||
[ 50] InitializeLexicalBinding identifier:b, src:arg1
|
||||
[ 68] InitializeLexicalBinding identifier:c, src:arg2
|
||||
|
||||
Reference in New Issue
Block a user