summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h32
1 files changed, 6 insertions, 26 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index 2a8df0111..c1d2d8674 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -2264,21 +2264,7 @@ public:
}
};
-// Execute an initializer expression of a global, data or element segment.
-// see: https://webassembly.org/docs/modules/#initializer-expression
-template<typename GlobalManager>
-class InitializerExpressionRunner
- : public ExpressionRunner<InitializerExpressionRunner<GlobalManager>> {
- GlobalManager& globals;
-
-public:
- InitializerExpressionRunner(GlobalManager& globals, Index maxDepth)
- : ExpressionRunner<InitializerExpressionRunner<GlobalManager>>(nullptr,
- maxDepth),
- globals(globals) {}
-
- Flow visitGlobalGet(GlobalGet* curr) { return Flow(globals[curr->name]); }
-};
+using GlobalValueSet = std::map<Name, Literals>;
//
// A runner for a module. Each runner contains the information to execute the
@@ -2294,7 +2280,7 @@ public:
// To call into the interpreter, use callExport.
//
-template<typename GlobalManager, typename SubType>
+template<typename SubType>
class ModuleRunnerBase : public ExpressionRunner<SubType> {
public:
//
@@ -2307,7 +2293,7 @@ public:
std::map<Name, std::shared_ptr<SubType>> linkedInstances = {}) {}
virtual ~ExternalInterface() = default;
virtual void init(Module& wasm, SubType& instance) {}
- virtual void importGlobals(GlobalManager& globals, Module& wasm) = 0;
+ virtual void importGlobals(GlobalValueSet& globals, Module& wasm) = 0;
virtual Literals callImport(Function* import, Literals& arguments) = 0;
virtual Literals callTable(Name tableName,
Index index,
@@ -2482,7 +2468,7 @@ public:
Module& wasm;
// Values of globals
- GlobalManager globals;
+ GlobalValueSet globals;
// Multivalue ABI support (see push/pop).
std::vector<Literals> multiValues;
@@ -2499,10 +2485,7 @@ public:
memorySize = wasm.memory.initial;
// generate internal (non-imported) globals
ModuleUtils::iterDefinedGlobals(wasm, [&](Global* global) {
- globals[global->name] =
- InitializerExpressionRunner<GlobalManager>(globals, maxDepth)
- .visit(global->init)
- .values;
+ globals[global->name] = self()->visit(global->init).values;
});
// initialize the rest of the external interface
@@ -3687,10 +3670,7 @@ protected:
std::map<Name, std::shared_ptr<SubType>> linkedInstances;
};
-// The default ModuleRunner uses a trivial global manager
-using TrivialGlobalManager = std::map<Name, Literals>;
-class ModuleRunner
- : public ModuleRunnerBase<TrivialGlobalManager, ModuleRunner> {
+class ModuleRunner : public ModuleRunnerBase<ModuleRunner> {
public:
ModuleRunner(
Module& wasm,