mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
LibJS+LibWeb: Port remaining callers to Rust pipeline
Port all remaining users of the C++ Parser/Lexer/Generator to use the Rust pipeline instead: - Intrinsics: Remove C++ fallback in parse_builtin_file() - ECMAScriptFunctionObject: Remove C++ compile() fallback - NativeJavaScriptBackedFunction: Remove C++ compile() fallback - EventTarget: Port to compile_dynamic_function - WebDriver/ExecuteScript: Port to compile_dynamic_function - LibTest/JavaScriptTestRunner.h: Remove Parser/Lexer includes - FuzzilliJs: Remove unused Parser/Lexer includes Also remove the dead Statement-based template instantiation of async_block_start/async_function_start.
This commit is contained in:
committed by
Andreas Kling
parent
0c7d50b33d
commit
3518efd71c
Notes:
github-actions[bot]
2026-03-20 02:57:29 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/3518efd71ca Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/8517
@@ -5,12 +5,12 @@
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibJS/Parser.h>
|
||||
#include <LibJS/Runtime/ECMAScriptFunctionObject.h>
|
||||
#include <LibJS/Runtime/GlobalEnvironment.h>
|
||||
#include <LibJS/Runtime/ObjectEnvironment.h>
|
||||
#include <LibJS/Runtime/PromiseConstructor.h>
|
||||
#include <LibJS/Runtime/SharedFunctionInstanceData.h>
|
||||
#include <LibJS/RustIntegration.h>
|
||||
#include <LibWeb/DOM/Document.h>
|
||||
#include <LibWeb/HTML/BrowsingContext.h>
|
||||
#include <LibWeb/HTML/Scripting/Environments.h>
|
||||
@@ -56,37 +56,23 @@ static JS::ThrowCompletionOr<JS::Value> execute_a_function_body(HTML::BrowsingCo
|
||||
}})~~~",
|
||||
body);
|
||||
|
||||
auto parser = JS::Parser(JS::Lexer(JS::SourceCode::create({}, Utf16String::from_utf8(source_text))));
|
||||
;
|
||||
auto function_expression = parser.parse_function_node<JS::FunctionExpression>();
|
||||
auto rust_compilation = JS::RustIntegration::compile_dynamic_function(
|
||||
realm.vm(), source_text, ""sv, body, JS::FunctionKind::Normal);
|
||||
|
||||
// 4. If body is not parsable as a FunctionBody or if parsing detects an early error, return Completion { [[Type]]: normal, [[Value]]: null, [[Target]]: empty }.
|
||||
if (parser.has_errors())
|
||||
if (!rust_compilation.has_value() || rust_compilation->is_error())
|
||||
return JS::js_null();
|
||||
|
||||
// 5. If body begins with a directive prologue that contains a use strict directive then let strict be true, otherwise let strict be false.
|
||||
// NOTE: Handled in step 8 below.
|
||||
|
||||
// 6. Prepare to run a script with realm.
|
||||
HTML::prepare_to_run_script(realm);
|
||||
|
||||
// 7. Prepare to run a callback with environment settings.
|
||||
HTML::prepare_to_run_callback(realm);
|
||||
|
||||
// 8. Let function be the result of calling FunctionCreate, with arguments:
|
||||
// kind
|
||||
// Normal.
|
||||
// list
|
||||
// An empty List.
|
||||
// body
|
||||
// The result of parsing body above.
|
||||
// global scope
|
||||
// The result of parsing global scope above.
|
||||
// strict
|
||||
// The result of parsing strict above.
|
||||
// 8. Let function be the result of calling FunctionCreate.
|
||||
auto function = JS::ECMAScriptFunctionObject::create_from_function_data(
|
||||
realm,
|
||||
JS::SharedFunctionInstanceData::create_for_function_node(realm.vm(), *function_expression),
|
||||
rust_compilation->value(),
|
||||
&global_scope,
|
||||
nullptr);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user