diff options
Diffstat (limited to 'src/s2wasm.h')
-rw-r--r-- | src/s2wasm.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/s2wasm.h b/src/s2wasm.h index 24f39ae8d..2744bafc9 100644 --- a/src/s2wasm.h +++ b/src/s2wasm.h @@ -44,6 +44,7 @@ class S2WasmBuilder { bool debug; bool ignoreUnknownSymbols; Name startFunction; + std::vector<Name> globls; public: S2WasmBuilder(AllocatingModule& wasm, const char* input, bool debug, @@ -465,7 +466,8 @@ class S2WasmBuilder { } void parseGlobl() { - (void)getStr(); + auto str = getStr(); + globls.push_back(str); skipWhitespace(); } @@ -1029,10 +1031,6 @@ class S2WasmBuilder { } func->body->dyn_cast<Block>()->finalize(); wasm.addFunction(func); - // XXX for now, export all functions - auto exp = allocator.alloc<Export>(); - exp->name = exp->value = func->name; - wasm.addExport(exp); } void parseType() { @@ -1190,6 +1188,15 @@ class S2WasmBuilder { wasm.memory.initial = ((initialMemory + Memory::kPageSize - 1) & Memory::kPageMask) / Memory::kPageSize; + // XXX For now, export all functions marked .globl. + for (Name name : globls) { + if (wasm.functionsMap.count(name)) { + auto exp = allocator.alloc<Export>(); + exp->name = exp->value = name; + wasm.addExport(exp); + } + } + auto ensureFunctionIndex = [&](Name name) { if (functionIndexes.count(name) == 0) { functionIndexes[name] = wasm.table.names.size(); |