LibJS: Generate FFI header using cbindgen instead of hand-rolling

Replace the BytecodeFactory header with cbindgen.

This will help ensure that types and enums and constants are kept in
sync between the C++ and Rust code. It's also a step in exporting more
Rust enums directly rather than relying on magic constants for
switch statements.

The FFI functions are now all placed in the JS::FFI namespace, which
is the cause for all the churn in the scripting parts of LibJS and
LibWeb.
This commit is contained in:
Andrew Kaster 2026-03-17 15:47:58 -06:00 committed by Andreas Kling
parent c381cd7d68
commit 92e4c20ad5
Notes: github-actions[bot] 2026-03-18 01:50:46 +00:00
19 changed files with 1167 additions and 557 deletions

View file

@ -10,7 +10,11 @@
#include <LibWeb/Export.h>
#include <LibWeb/HTML/Scripting/Script.h>
struct RustParsedProgram;
namespace JS::FFI {
struct ParsedProgram;
}
namespace Web::HTML {
@ -36,7 +40,7 @@ public:
virtual ~JavaScriptModuleScript() override;
static WebIDL::ExceptionOr<GC::Ptr<JavaScriptModuleScript>> create(ByteString const& filename, StringView source, JS::Realm&, URL::URL base_url);
static WebIDL::ExceptionOr<GC::Ptr<JavaScriptModuleScript>> create_from_pre_parsed(ByteString const& filename, NonnullRefPtr<JS::SourceCode const> source_code, JS::Realm&, URL::URL base_url, RustParsedProgram* parsed);
static WebIDL::ExceptionOr<GC::Ptr<JavaScriptModuleScript>> create_from_pre_parsed(ByteString const& filename, NonnullRefPtr<JS::SourceCode const> source_code, JS::Realm&, URL::URL base_url, JS::FFI::ParsedProgram* parsed);
enum class PreventErrorReporting {
Yes,