Index: src/wasm/encoder.cc |
diff --git a/src/wasm/encoder.cc b/src/wasm/encoder.cc |
index 70d739ec67277e4606aae5f574e8d505ef5c7996..c7febe1e9f27f9a4caf5e999edc12680ce4a4910 100644 |
--- a/src/wasm/encoder.cc |
+++ b/src/wasm/encoder.cc |
@@ -195,6 +195,7 @@ WasmFunctionEncoder* WasmFunctionBuilder::Build(Zone* zone, |
void WasmFunctionBuilder::IndexVars(WasmFunctionEncoder* e, |
uint16_t* var_index) const { |
+ // TODO(titzer): all of this is unnecessary now. |
uint16_t param = 0; |
uint16_t i32 = 0; |
uint16_t i64 = 0; |
@@ -213,10 +214,10 @@ void WasmFunctionBuilder::IndexVars(WasmFunctionEncoder* e, |
f64++; |
} |
} |
- e->local_i32_count_ = i32; |
- e->local_i64_count_ = i64; |
- e->local_f32_count_ = f32; |
- e->local_f64_count_ = f64; |
+ e->local_decls_.AddLocals(i32, kAstI32); |
+ e->local_decls_.AddLocals(i64, kAstI64); |
+ e->local_decls_.AddLocals(f32, kAstF32); |
+ e->local_decls_.AddLocals(f64, kAstF64); |
f64 = param + i32 + i64 + f32; |
f32 = param + i32 + i64; |
i64 = param + i32; |
@@ -250,7 +251,6 @@ WasmFunctionEncoder::WasmFunctionEncoder(Zone* zone, LocalType return_type, |
uint32_t WasmFunctionEncoder::HeaderSize() const { |
uint32_t size = 3; |
- if (HasLocals()) size += 8; |
if (!external_) size += 2; |
if (HasName()) size += 4; |
return size; |
@@ -258,7 +258,8 @@ uint32_t WasmFunctionEncoder::HeaderSize() const { |
uint32_t WasmFunctionEncoder::BodySize(void) const { |
- return external_ ? 0 : static_cast<uint32_t>(body_.size()); |
+ return external_ ? 0 |
+ : static_cast<uint32_t>(local_decls_.Size() + body_.size()); |
} |
@@ -271,7 +272,6 @@ void WasmFunctionEncoder::Serialize(byte* buffer, byte** header, |
byte** body) const { |
uint8_t decl_bits = (exported_ ? kDeclFunctionExport : 0) | |
(external_ ? kDeclFunctionImport : 0) | |
- (HasLocals() ? kDeclFunctionLocals : 0) | |
(HasName() ? kDeclFunctionName : 0); |
EmitUint8(header, decl_bits); |
@@ -284,15 +284,10 @@ void WasmFunctionEncoder::Serialize(byte* buffer, byte** header, |
(*body) += name_.size(); |
} |
- if (HasLocals()) { |
- EmitUint16(header, local_i32_count_); |
- EmitUint16(header, local_i64_count_); |
- EmitUint16(header, local_f32_count_); |
- EmitUint16(header, local_f64_count_); |
- } |
- |
if (!external_) { |
- EmitUint16(header, static_cast<uint16_t>(body_.size())); |
+ size_t size = body_.size() + local_decls_.Size(); |
+ EmitUint16(header, static_cast<uint16_t>(size)); |
bradnelson
2016/03/02 21:51:15
I assume this will change to a leb in a later chan
titzer
2016/03/02 22:43:41
Yeah, we'll just update everything to be LEB in on
|
+ (*header) += local_decls_.Emit(*header); |
if (body_.size() > 0) { |
std::memcpy(*header, &body_[0], body_.size()); |
(*header) += body_.size(); |