@@ -42,13 +42,6 @@ Name ASSERT_UNLINKABLE("assert_unlinkable");
42
42
Name INVOKE (" invoke" );
43
43
Name GET (" get" );
44
44
45
- // Modules named in the file
46
-
47
- std::map<Name, std::unique_ptr<Module>> modules;
48
- std::map<Name, std::unique_ptr<SExpressionWasmBuilder>> builders;
49
- std::map<Name, std::unique_ptr<ShellExternalInterface>> interfaces;
50
- std::map<Name, std::unique_ptr<ModuleInstance>> instances;
51
-
52
45
//
53
46
// An operation on a module
54
47
//
@@ -61,7 +54,8 @@ struct Operation {
61
54
62
55
Operation (Element& element,
63
56
ModuleInstance* instanceInit,
64
- SExpressionWasmBuilder& builder)
57
+ SExpressionWasmBuilder& builder,
58
+ std::map<Name, std::unique_ptr<ModuleInstance>>& instances)
65
59
: instance(instanceInit) {
66
60
operation = element[0 ]->str ();
67
61
Index i = 1 ;
@@ -88,13 +82,16 @@ struct Operation {
88
82
}
89
83
};
90
84
91
- static void run_asserts (Name moduleName,
92
- size_t * i,
93
- bool * checked,
94
- Module* wasm,
95
- Element* root,
96
- SExpressionWasmBuilder* builder,
97
- Name entry) {
85
+ static void
86
+ run_asserts (Name moduleName,
87
+ size_t * i,
88
+ bool * checked,
89
+ Module* wasm,
90
+ Element* root,
91
+ SExpressionWasmBuilder* builder,
92
+ Name entry,
93
+ std::map<Name, std::unique_ptr<ShellExternalInterface>>& interfaces,
94
+ std::map<Name, std::unique_ptr<ModuleInstance>>& instances) {
98
95
ModuleInstance* instance = nullptr ;
99
96
if (wasm) {
100
97
// prefix make_unique to work around visual studio bugs
@@ -195,15 +192,15 @@ static void run_asserts(Name moduleName,
195
192
}
196
193
} else if (id == INVOKE) {
197
194
assert (wasm);
198
- Operation operation (curr, instance, *builder);
195
+ Operation operation (curr, instance, *builder, instances );
199
196
operation.operate ();
200
197
} else if (wasm) { // if no wasm, we skipped the module
201
198
// an invoke test
202
199
bool trapped = false ;
203
200
WASM_UNUSED (trapped);
204
201
Literals result;
205
202
try {
206
- Operation operation (*curr[1 ], instance, *builder);
203
+ Operation operation (*curr[1 ], instance, *builder, instances );
207
204
result = operation.operate ();
208
205
} catch (const TrapException&) {
209
206
trapped = true ;
@@ -274,6 +271,13 @@ int main(int argc, const char* argv[]) {
274
271
275
272
bool checked = false ;
276
273
274
+ // Modules named in the file
275
+
276
+ std::map<Name, std::unique_ptr<Module>> modules;
277
+ std::map<Name, std::unique_ptr<SExpressionWasmBuilder>> builders;
278
+ std::map<Name, std::unique_ptr<ShellExternalInterface>> interfaces;
279
+ std::map<Name, std::unique_ptr<ModuleInstance>> instances;
280
+
277
281
try {
278
282
if (options.debug ) {
279
283
std::cerr << " parsing text to s-expressions...\n " ;
@@ -319,9 +323,19 @@ int main(int argc, const char* argv[]) {
319
323
modules[moduleName].get (),
320
324
&root,
321
325
builders[moduleName].get (),
322
- entry);
326
+ entry,
327
+ interfaces,
328
+ instances);
323
329
} else {
324
- run_asserts (Name (), &i, &checked, nullptr , &root, nullptr , entry);
330
+ run_asserts (Name (),
331
+ &i,
332
+ &checked,
333
+ nullptr ,
334
+ &root,
335
+ nullptr ,
336
+ entry,
337
+ interfaces,
338
+ instances);
325
339
}
326
340
}
327
341
} catch (ParseException& p) {
0 commit comments