Chromium Code Reviews| 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())); |
|
titzer
2016/12/01 09:22:24
There was a memcpy in the old code. Is that necess
bradn
2016/12/01 09:27:08
No, the old code was sharing a single vector, whic
|
| } |
| 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); |