Index: src/wasm/wasm-module-builder.cc |
diff --git a/src/wasm/wasm-module-builder.cc b/src/wasm/wasm-module-builder.cc |
index dfc80ae0ea3d6579bdf9b30b4cbd22a74588e678..4f90a655bf29c8ddbead0a851981adf52db52c0e 100644 |
--- a/src/wasm/wasm-module-builder.cc |
+++ b/src/wasm/wasm-module-builder.cc |
@@ -55,6 +55,7 @@ WasmFunctionBuilder::WasmFunctionBuilder(WasmModuleBuilder* builder) |
func_index_(static_cast<uint32_t>(builder->functions_.size())), |
body_(builder->zone()), |
name_(builder->zone()), |
+ exported_name_(builder->zone()), |
i32_temps_(builder->zone()), |
i64_temps_(builder->zone()), |
f32_temps_(builder->zone()), |
@@ -142,13 +143,16 @@ void WasmFunctionBuilder::EmitDirectCallIndex(uint32_t index) { |
void WasmFunctionBuilder::SetExported() { exported_ = true; } |
+void WasmFunctionBuilder::SetExportedWithName(const char* name, |
+ int name_length) { |
+ exported_ = true; |
+ exported_name_.resize(name_length); |
+ memcpy(exported_name_.data(), name, name_length); |
+} |
+ |
void WasmFunctionBuilder::SetName(const char* name, int name_length) { |
- name_.clear(); |
- if (name_length > 0) { |
- for (int i = 0; i < name_length; ++i) { |
- name_.push_back(*(name + i)); |
- } |
- } |
+ name_.resize(name_length); |
+ memcpy(name_.data(), name, name_length); |
} |
void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { |
@@ -157,10 +161,11 @@ void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { |
void WasmFunctionBuilder::WriteExport(ZoneBuffer& buffer) const { |
if (exported_) { |
- buffer.write_size(name_.size()); |
- if (name_.size() > 0) { |
- buffer.write(reinterpret_cast<const byte*>(&name_[0]), name_.size()); |
- } |
+ 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()); |
buffer.write_u8(kExternalFunction); |
buffer.write_u32v(func_index_ + |
static_cast<uint32_t>(builder_->imports_.size())); |