Index: src/wasm/wasm-module-builder.cc |
diff --git a/src/wasm/wasm-module-builder.cc b/src/wasm/wasm-module-builder.cc |
index 13b785457cbb033a629b1731034050cf21de5dbc..81c34d43eb6b03ec3b1687aad4f2952a5c7b1a38 100644 |
--- a/src/wasm/wasm-module-builder.cc |
+++ b/src/wasm/wasm-module-builder.cc |
@@ -168,23 +168,6 @@ void WasmFunctionBuilder::WriteBody(ZoneBuffer& buffer) const { |
} |
} |
-WasmDataSegmentEncoder::WasmDataSegmentEncoder(Zone* zone, const byte* data, |
- uint32_t size, uint32_t dest) |
- : data_(zone), dest_(dest) { |
- for (size_t i = 0; i < size; ++i) { |
- data_.push_back(data[i]); |
- } |
-} |
- |
-void WasmDataSegmentEncoder::Write(ZoneBuffer& buffer) const { |
- buffer.write_u8(0); // linear memory zero |
- buffer.write_u8(kExprI32Const); |
- buffer.write_u32v(dest_); |
- buffer.write_u8(kExprEnd); |
- buffer.write_u32v(static_cast<uint32_t>(data_.size())); |
- buffer.write(&data_[0], data_.size()); |
-} |
- |
WasmModuleBuilder::WasmModuleBuilder(Zone* zone) |
: zone_(zone), |
signatures_(zone), |
@@ -203,8 +186,13 @@ WasmFunctionBuilder* WasmModuleBuilder::AddFunction(FunctionSig* sig) { |
return functions_.back(); |
} |
-void WasmModuleBuilder::AddDataSegment(WasmDataSegmentEncoder* data) { |
- data_segments_.push_back(data); |
+void WasmModuleBuilder::AddDataSegment(const byte* data, uint32_t size, |
+ uint32_t dest) { |
+ data_segments_.push_back({ZoneVector<byte>(zone()), dest}); |
+ ZoneVector<byte>& vec = data_segments_.back().data; |
+ for (uint32_t i = 0; i < size; i++) { |
+ vec.push_back(data[i]); |
+ } |
} |
bool WasmModuleBuilder::CompareFunctionSigs::operator()(FunctionSig* a, |
@@ -253,7 +241,7 @@ void WasmModuleBuilder::MarkStartFunction(WasmFunctionBuilder* function) { |
uint32_t WasmModuleBuilder::AddGlobal(LocalType type, bool exported, |
bool mutability) { |
- globals_.push_back(std::make_tuple(type, exported, mutability)); |
+ globals_.push_back({type, exported, mutability}); |
return static_cast<uint32_t>(globals_.size() - 1); |
} |
@@ -339,12 +327,9 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { |
buffer.write_size(globals_.size()); |
for (auto global : globals_) { |
- static const int kLocalTypeIndex = 0; |
- static const int kMutabilityIndex = 2; |
- buffer.write_u8( |
- WasmOpcodes::LocalTypeCodeFor(std::get<kLocalTypeIndex>(global))); |
- buffer.write_u8(std::get<kMutabilityIndex>(global)); |
- switch (std::get<kLocalTypeIndex>(global)) { |
+ buffer.write_u8(WasmOpcodes::LocalTypeCodeFor(global.type)); |
+ buffer.write_u8(global.mutability ? 1 : 0); |
+ switch (global.type) { |
case kAstI32: { |
static const byte code[] = {WASM_I32V_1(0)}; |
buffer.write(code, sizeof(code)); |
@@ -421,7 +406,12 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { |
buffer.write_size(data_segments_.size()); |
for (auto segment : data_segments_) { |
- segment->Write(buffer); |
+ buffer.write_u8(0); // linear memory segment |
+ buffer.write_u8(kExprI32Const); // initializer expression for dest |
+ buffer.write_u32v(segment.dest); |
+ buffer.write_u8(kExprEnd); |
+ buffer.write_u32v(static_cast<uint32_t>(segment.data.size())); |
+ buffer.write(&segment.data[0], segment.data.size()); |
} |
FixupSection(buffer, start); |
} |