summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 869b44f2c..b45fe84c8 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -864,19 +864,27 @@ void WasmBinaryWriter::writeNames() {
// function names
{
- auto substart =
- startSubsection(BinaryConsts::CustomSections::Subsection::NameFunction);
- o << U32LEB(indexes.functionIndexes.size());
- Index emitted = 0;
- auto add = [&](Function* curr) {
- o << U32LEB(emitted);
- writeEscapedName(curr->name.str);
- emitted++;
+ std::vector<std::pair<Index, Function*>> functionsWithNames;
+ Index checked = 0;
+ auto check = [&](Function* curr) {
+ if (curr->hasExplicitName) {
+ functionsWithNames.push_back({checked, curr});
+ }
+ checked++;
};
- ModuleUtils::iterImportedFunctions(*wasm, add);
- ModuleUtils::iterDefinedFunctions(*wasm, add);
- assert(emitted == indexes.functionIndexes.size());
- finishSubsection(substart);
+ ModuleUtils::iterImportedFunctions(*wasm, check);
+ ModuleUtils::iterDefinedFunctions(*wasm, check);
+ assert(checked == indexes.functionIndexes.size());
+ if (functionsWithNames.size() > 0) {
+ auto substart =
+ startSubsection(BinaryConsts::CustomSections::Subsection::NameFunction);
+ o << U32LEB(functionsWithNames.size());
+ for (auto& [index, global] : functionsWithNames) {
+ o << U32LEB(index);
+ writeEscapedName(global->name.str);
+ }
+ finishSubsection(substart);
+ }
}
// local names