Index: src/wasm/encoder.h |
diff --git a/src/wasm/encoder.h b/src/wasm/encoder.h |
index 5d2e6c8faea1b7843ed3adb79c71fa51558f1e7e..14248b01c89b62583db14634c724dbc1e5c0fab0 100644 |
--- a/src/wasm/encoder.h |
+++ b/src/wasm/encoder.h |
@@ -112,27 +112,9 @@ class ZoneBuffer : public ZoneObject { |
class WasmModuleBuilder; |
-class WasmFunctionEncoder : public ZoneObject { |
- public: |
- void WriteSignature(ZoneBuffer& buffer) const; |
- void WriteExport(ZoneBuffer& buffer, uint32_t func_index) const; |
- void WriteBody(ZoneBuffer& buffer) const; |
- bool exported() const { return exported_; } |
- |
- private: |
- WasmFunctionEncoder(Zone* zone, LocalDeclEncoder locals, bool exported); |
- friend class WasmFunctionBuilder; |
- uint32_t signature_index_; |
- LocalDeclEncoder locals_; |
- bool exported_; |
- ZoneVector<uint8_t> body_; |
- ZoneVector<char> name_; |
- |
- bool HasName() const { return exported_ && name_.size() > 0; } |
-}; |
- |
class WasmFunctionBuilder : public ZoneObject { |
public: |
+ // Building methods. |
void SetSignature(FunctionSig* sig); |
uint32_t AddLocal(LocalType type); |
void EmitVarInt(uint32_t val); |
@@ -144,20 +126,27 @@ class WasmFunctionBuilder : public ZoneObject { |
void EmitWithU8(WasmOpcode opcode, const byte immediate); |
void EmitWithU8U8(WasmOpcode opcode, const byte imm1, const byte imm2); |
void EmitWithVarInt(WasmOpcode opcode, uint32_t immediate); |
- void Exported(uint8_t flag); |
+ void SetExported(); |
void SetName(const char* name, int name_length); |
- WasmFunctionEncoder* Build(Zone* zone, WasmModuleBuilder* mb) const; |
+ bool exported() { return exported_; } |
+ |
+ // Writing methods. |
+ void WriteSignature(ZoneBuffer& buffer) const; |
+ void WriteExport(ZoneBuffer& buffer, uint32_t func_index) const; |
+ void WriteBody(ZoneBuffer& buffer) const; |
private: |
- explicit WasmFunctionBuilder(Zone* zone); |
+ explicit WasmFunctionBuilder(WasmModuleBuilder* builder); |
friend class WasmModuleBuilder; |
+ WasmModuleBuilder* builder_; |
LocalDeclEncoder locals_; |
- uint8_t exported_; |
+ uint32_t signature_index_; |
+ bool exported_; |
ZoneVector<uint8_t> body_; |
ZoneVector<char> name_; |
- void IndexVars(WasmFunctionEncoder* e, uint32_t* var_index) const; |
}; |
+// TODO(titzer): kill! |
class WasmDataSegmentEncoder : public ZoneObject { |
public: |
WasmDataSegmentEncoder(Zone* zone, const byte* data, uint32_t size, |
@@ -175,25 +164,11 @@ struct WasmFunctionImport { |
int name_length; |
}; |
-class WasmModuleWriter : public ZoneObject { |
- public: |
- void WriteTo(ZoneBuffer& buffer) const; |
- |
- private: |
- friend class WasmModuleBuilder; |
- explicit WasmModuleWriter(Zone* zone); |
- ZoneVector<WasmFunctionImport> imports_; |
- ZoneVector<WasmFunctionEncoder*> functions_; |
- ZoneVector<WasmDataSegmentEncoder*> data_segments_; |
- ZoneVector<FunctionSig*> signatures_; |
- ZoneVector<uint32_t> indirect_functions_; |
- ZoneVector<std::pair<MachineType, bool>> globals_; |
- int start_function_index_; |
-}; |
- |
class WasmModuleBuilder : public ZoneObject { |
public: |
explicit WasmModuleBuilder(Zone* zone); |
+ |
+ // Building methods. |
uint32_t AddFunction(); |
uint32_t AddGlobal(MachineType type, bool exported); |
WasmFunctionBuilder* FunctionAt(size_t index); |
@@ -202,13 +177,17 @@ class WasmModuleBuilder : public ZoneObject { |
void AddIndirectFunction(uint32_t index); |
void MarkStartFunction(uint32_t index); |
uint32_t AddImport(const char* name, int name_length, FunctionSig* sig); |
- WasmModuleWriter* Build(Zone* zone); |
+ |
+ // Writing methods. |
+ void WriteTo(ZoneBuffer& buffer) const; |
struct CompareFunctionSigs { |
bool operator()(FunctionSig* a, FunctionSig* b) const; |
}; |
typedef ZoneMap<FunctionSig*, uint32_t, CompareFunctionSigs> SignatureMap; |
+ Zone* zone() { return zone_; } |
+ |
private: |
Zone* zone_; |
ZoneVector<FunctionSig*> signatures_; |