Index: src/wasm/wasm-module-builder.cc |
diff --git a/src/wasm/wasm-module-builder.cc b/src/wasm/wasm-module-builder.cc |
index 4bc569a68ca7d2f8045304944a02fddbe17dc673..111b90ba372ea58766a930587088ab02eefad28c 100644 |
--- a/src/wasm/wasm-module-builder.cc |
+++ b/src/wasm/wasm-module-builder.cc |
@@ -50,11 +50,10 @@ WasmFunctionBuilder::WasmFunctionBuilder(WasmModuleBuilder* builder) |
: builder_(builder), |
locals_(builder->zone()), |
signature_index_(0), |
- exported_(0), |
func_index_(static_cast<uint32_t>(builder->functions_.size())), |
body_(builder->zone()), |
name_(builder->zone()), |
- exported_name_(builder->zone()), |
+ exported_names_(builder->zone()), |
i32_temps_(builder->zone()), |
i64_temps_(builder->zone()), |
f32_temps_(builder->zone()), |
@@ -141,12 +140,9 @@ void WasmFunctionBuilder::EmitDirectCallIndex(uint32_t index) { |
EmitCode(code, sizeof(code)); |
} |
-void WasmFunctionBuilder::Export() { exported_ = true; } |
- |
void WasmFunctionBuilder::ExportAs(Vector<const char> name) { |
- exported_ = true; |
- exported_name_.resize(name.length()); |
- memcpy(exported_name_.data(), name.start(), name.length()); |
+ exported_names_.push_back(ZoneVector<char>( |
+ name.start(), name.start() + name.length(), builder_->zone())); |
} |
void WasmFunctionBuilder::SetName(Vector<const char> name) { |
@@ -172,13 +168,10 @@ void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { |
buffer.write_u32v(signature_index_); |
} |
-void WasmFunctionBuilder::WriteExport(ZoneBuffer& buffer) const { |
- if (exported_) { |
- const ZoneVector<char>* exported_name = |
- exported_name_.size() == 0 ? &name_ : &exported_name_; |
- buffer.write_size(exported_name->size()); |
- buffer.write(reinterpret_cast<const byte*>(exported_name->data()), |
- exported_name->size()); |
+void WasmFunctionBuilder::WriteExports(ZoneBuffer& buffer) const { |
+ for (auto name : exported_names_) { |
+ buffer.write_size(name.size()); |
+ buffer.write(reinterpret_cast<const byte*>(name.data()), name.size()); |
buffer.write_u8(kExternalFunction); |
buffer.write_u32v(func_index_ + |
static_cast<uint32_t>(builder_->imports_.size())); |
@@ -348,7 +341,7 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { |
buffer.write_size(functions_.size()); |
for (auto function : functions_) { |
function->WriteSignature(buffer); |
- if (function->exported()) exports++; |
+ exports += function->exported_names_.size(); |
if (function->name_.size() > 0) has_names = true; |
} |
FixupSection(buffer, start); |
@@ -451,7 +444,7 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { |
if (exports > 0) { |
size_t start = EmitSection(kExportSectionCode, buffer); |
buffer.write_u32v(exports); |
- for (auto function : functions_) function->WriteExport(buffer); |
+ for (auto function : functions_) function->WriteExports(buffer); |
FixupSection(buffer, start); |
} |
@@ -524,10 +517,8 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { |
} |
for (auto function : functions_) { |
buffer.write_size(function->name_.size()); |
- if (function->name_.size() > 0) { |
- buffer.write(reinterpret_cast<const byte*>(&function->name_[0]), |
- function->name_.size()); |
- } |
+ buffer.write(reinterpret_cast<const byte*>(function->name_.data()), |
+ function->name_.size()); |
buffer.write_u8(0); |
} |
FixupSection(buffer, start); |