Index: src/wasm/ast-decoder.h |
diff --git a/src/wasm/ast-decoder.h b/src/wasm/ast-decoder.h |
index 4693af1ca0b2435f93ecb41606dcd89688d8e1e3..386f6f52b2d1456f28cb01232cfcdfaf47e8eaec 100644 |
--- a/src/wasm/ast-decoder.h |
+++ b/src/wasm/ast-decoder.h |
@@ -183,61 +183,13 @@ struct MemoryAccessOperand { |
typedef compiler::WasmGraphBuilder TFBuilder; |
struct ModuleEnv; // forward declaration of module interface. |
-// Interface the function environment during decoding, include the signature |
-// and number of locals. |
-struct FunctionEnv { |
- ModuleEnv* module; // module environment |
- FunctionSig* sig; // signature of this function |
- uint32_t local_i32_count; // number of int32 locals |
- uint32_t local_i64_count; // number of int64 locals |
- uint32_t local_f32_count; // number of float32 locals |
- uint32_t local_f64_count; // number of float64 locals |
- uint32_t total_locals; // sum of parameters and all locals |
- |
- uint32_t GetLocalCount() { return total_locals; } |
- LocalType GetLocalType(uint32_t index) { |
- if (index < static_cast<uint32_t>(sig->parameter_count())) { |
- return sig->GetParam(index); |
- } |
- index -= static_cast<uint32_t>(sig->parameter_count()); |
- if (index < local_i32_count) return kAstI32; |
- index -= local_i32_count; |
- if (index < local_i64_count) return kAstI64; |
- index -= local_i64_count; |
- if (index < local_f32_count) return kAstF32; |
- index -= local_f32_count; |
- if (index < local_f64_count) return kAstF64; |
- return kAstStmt; |
- } |
- |
- void AddLocals(LocalType type, uint32_t count) { |
- switch (type) { |
- case kAstI32: |
- local_i32_count += count; |
- break; |
- case kAstI64: |
- local_i64_count += count; |
- break; |
- case kAstF32: |
- local_f32_count += count; |
- break; |
- case kAstF64: |
- local_f64_count += count; |
- break; |
- default: |
- UNREACHABLE(); |
- } |
- total_locals += count; |
- DCHECK_EQ(total_locals, |
- (sig->parameter_count() + local_i32_count + local_i64_count + |
- local_f32_count + local_f64_count)); |
- } |
- |
- void SumLocals() { |
- total_locals = static_cast<uint32_t>(sig->parameter_count()) + |
- local_i32_count + local_i64_count + local_f32_count + |
- local_f64_count; |
- } |
+// All of the various data structures necessary to decode a function body. |
+struct FunctionBody { |
+ ModuleEnv* module; // module environment |
+ FunctionSig* sig; // function signature |
+ const byte* base; // base of the module bytes, for error reporting |
+ const byte* start; // start of the function body |
+ const byte* end; // end of the function body |
}; |
struct Tree; |
@@ -245,21 +197,21 @@ typedef Result<Tree*> TreeResult; |
std::ostream& operator<<(std::ostream& os, const Tree& tree); |
-TreeResult VerifyWasmCode(FunctionEnv* env, const byte* base, const byte* start, |
- const byte* end); |
-TreeResult BuildTFGraph(TFBuilder* builder, FunctionEnv* env, const byte* base, |
- const byte* start, const byte* end); |
- |
-void PrintAst(FunctionEnv* env, const byte* start, const byte* end); |
+TreeResult VerifyWasmCode(FunctionBody& body); |
+TreeResult BuildTFGraph(TFBuilder* builder, FunctionBody& body); |
+void PrintAst(FunctionBody& body); |
-inline TreeResult VerifyWasmCode(FunctionEnv* env, const byte* start, |
- const byte* end) { |
- return VerifyWasmCode(env, nullptr, start, end); |
+inline TreeResult VerifyWasmCode(ModuleEnv* module, FunctionSig* sig, |
+ const byte* start, const byte* end) { |
+ FunctionBody body = {module, sig, nullptr, start, end}; |
+ return VerifyWasmCode(body); |
} |
-inline TreeResult BuildTFGraph(TFBuilder* builder, FunctionEnv* env, |
- const byte* start, const byte* end) { |
- return BuildTFGraph(builder, env, nullptr, start, end); |
+inline TreeResult BuildTFGraph(TFBuilder* builder, ModuleEnv* module, |
+ FunctionSig* sig, const byte* start, |
+ const byte* end) { |
+ FunctionBody body = {module, sig, nullptr, start, end}; |
+ return BuildTFGraph(builder, body); |
} |
enum ReadUnsignedLEB128ErrorCode { kNoError, kInvalidLEB128, kMissingLEB128 }; |
@@ -267,14 +219,17 @@ enum ReadUnsignedLEB128ErrorCode { kNoError, kInvalidLEB128, kMissingLEB128 }; |
ReadUnsignedLEB128ErrorCode ReadUnsignedLEB128Operand(const byte*, const byte*, |
int*, uint32_t*); |
-BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, FunctionEnv* env, |
+std::vector<LocalType>* DecodeLocalDeclsForTesting(const byte* start, |
+ const byte* end); |
+BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, size_t num_locals, |
const byte* start, const byte* end); |
// Computes the length of the opcode at the given address. |
int OpcodeLength(const byte* pc, const byte* end); |
// Computes the arity (number of sub-nodes) of the opcode at the given address. |
-int OpcodeArity(FunctionEnv* env, const byte* pc, const byte* end); |
+int OpcodeArity(ModuleEnv* module, FunctionSig* sig, const byte* pc, |
+ const byte* end); |
} // namespace wasm |
} // namespace internal |
} // namespace v8 |