mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-04-18 18:00:31 +00: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:
parent
8bf1d749a1
commit
6cdfbd01a6
Notes:
github-actions[bot]
2026-02-24 08:41:00 +00:00
Author: https://github.com/awesomekling
Commit: 6cdfbd01a6
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/8104
43 changed files with 28402 additions and 148 deletions
|
|
@ -12,6 +12,7 @@
|
|||
#include <LibJS/Runtime/AsyncGenerator.h>
|
||||
#include <LibJS/Runtime/GeneratorObject.h>
|
||||
#include <LibJS/Runtime/NativeJavaScriptBackedFunction.h>
|
||||
#include <LibJS/RustIntegration.h>
|
||||
|
||||
namespace JS {
|
||||
|
||||
|
|
@ -98,7 +99,15 @@ Bytecode::Executable& NativeJavaScriptBackedFunction::bytecode_executable()
|
|||
{
|
||||
auto& executable = m_shared_function_instance_data->m_executable;
|
||||
if (!executable) {
|
||||
executable = Bytecode::compile(vm(), m_shared_function_instance_data, Bytecode::BuiltinAbstractOperationsEnabled::Yes);
|
||||
auto rust_executable = RustIntegration::compile_function(vm(), *m_shared_function_instance_data, true);
|
||||
if (rust_executable) {
|
||||
executable = rust_executable;
|
||||
executable->name = m_shared_function_instance_data->m_name;
|
||||
if (Bytecode::g_dump_bytecode)
|
||||
executable->dump();
|
||||
} else {
|
||||
executable = Bytecode::compile(vm(), m_shared_function_instance_data, Bytecode::BuiltinAbstractOperationsEnabled::Yes);
|
||||
}
|
||||
m_shared_function_instance_data->clear_compile_inputs();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue