mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-02-19 14:14:41 +00:00
LibWasm: Implement module validation
This commit is contained in:
committed by
Andreas Kling
parent
30736c39b9
commit
7d1142e2c8
@@ -8,6 +8,7 @@
|
||||
#include <LibWasm/AbstractMachine/BytecodeInterpreter.h>
|
||||
#include <LibWasm/AbstractMachine/Configuration.h>
|
||||
#include <LibWasm/AbstractMachine/Interpreter.h>
|
||||
#include <LibWasm/AbstractMachine/Validator.h>
|
||||
#include <LibWasm/Types.h>
|
||||
|
||||
namespace Wasm {
|
||||
@@ -100,8 +101,29 @@ ElementInstance* Store::get(ElementAddress address)
|
||||
return &m_elements[value];
|
||||
}
|
||||
|
||||
ErrorOr<void, ValidationError> AbstractMachine::validate(Module& module)
|
||||
{
|
||||
if (module.validation_status() != Module::ValidationStatus::Unchecked) {
|
||||
if (module.validation_status() == Module::ValidationStatus::Valid)
|
||||
return {};
|
||||
|
||||
return ValidationError { module.validation_error() };
|
||||
}
|
||||
|
||||
auto result = Validator {}.validate(module);
|
||||
if (result.is_error()) {
|
||||
module.set_validation_error(result.error().error_string);
|
||||
return result.release_error();
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
InstantiationResult AbstractMachine::instantiate(Module const& module, Vector<ExternValue> externs)
|
||||
{
|
||||
if (auto result = validate(const_cast<Module&>(module)); result.is_error())
|
||||
return InstantiationError { String::formatted("Validation failed: {}", result.error()) };
|
||||
|
||||
auto main_module_instance_pointer = make<ModuleInstance>();
|
||||
auto& main_module_instance = *main_module_instance_pointer;
|
||||
Optional<InstantiationResult> instantiation_result;
|
||||
@@ -110,8 +132,6 @@ InstantiationResult AbstractMachine::instantiate(Module const& module, Vector<Ex
|
||||
main_module_instance.types() = section.types();
|
||||
});
|
||||
|
||||
// FIXME: Validate stuff
|
||||
|
||||
Vector<Value> global_values;
|
||||
Vector<Vector<Reference>> elements;
|
||||
ModuleInstance auxiliary_instance;
|
||||
|
||||
Reference in New Issue
Block a user