Index: src/wasm/ast-decoder.cc |
diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc |
index a1416a97fea0fbf7908bc1c54a0236a50c5e5442..18e3b820a0555db800e0059b470671ffbe34ae25 100644 |
--- a/src/wasm/ast-decoder.cc |
+++ b/src/wasm/ast-decoder.cc |
@@ -31,17 +31,6 @@ namespace wasm { |
#define TRACE(...) |
#endif |
-// The root of a decoded tree. |
-struct Tree { |
- LocalType type; // tree type. |
- uint32_t count; // number of children. |
- const byte* pc; // start of the syntax tree. |
- TFNode* node; // node in the TurboFan graph. |
- Tree* children[1]; // pointers to children. |
- |
- WasmOpcode opcode() const { return static_cast<WasmOpcode>(*pc); } |
-}; |
- |
// An SsaEnv environment carries the current local variable renaming |
// as well as the current effect and control dependency in the TF graph. |
// It maintains a control state that tracks whether the environment |
@@ -409,11 +398,11 @@ class WasmDecoder : public Decoder { |
} |
}; |
-// A shift-reduce-parser strategy for decoding Wasm code that uses an explicit |
-// shift-reduce strategy with multiple internal stacks. |
-class SR_WasmDecoder : public WasmDecoder { |
+// The full WASM decoder for bytecode. Both verifies bytecode and generates |
+// a TurboFan IR graph. |
+class WasmFullDecoder : public WasmDecoder { |
public: |
- SR_WasmDecoder(Zone* zone, TFBuilder* builder, const FunctionBody& body) |
+ WasmFullDecoder(Zone* zone, TFBuilder* builder, const FunctionBody& body) |
: WasmDecoder(body.module, body.sig, body.start, body.end), |
zone_(zone), |
builder_(builder), |
@@ -1495,39 +1484,24 @@ bool DecodeLocalDecls(AstLocalDecls& decls, const byte* start, |
base::AccountingAllocator allocator; |
Zone tmp(&allocator); |
FunctionBody body = {nullptr, nullptr, nullptr, start, end}; |
- SR_WasmDecoder decoder(&tmp, nullptr, body); |
+ WasmFullDecoder decoder(&tmp, nullptr, body); |
return decoder.DecodeLocalDecls(decls); |
} |
-TreeResult VerifyWasmCode(base::AccountingAllocator* allocator, |
- FunctionBody& body) { |
+DecodeResult VerifyWasmCode(base::AccountingAllocator* allocator, |
+ FunctionBody& body) { |
Zone zone(allocator); |
- SR_WasmDecoder decoder(&zone, nullptr, body); |
+ WasmFullDecoder decoder(&zone, nullptr, body); |
decoder.Decode(); |
- return decoder.toResult<Tree*>(nullptr); |
+ return decoder.toResult<DecodeStruct*>(nullptr); |
} |
-TreeResult BuildTFGraph(base::AccountingAllocator* allocator, |
- TFBuilder* builder, FunctionBody& body) { |
+DecodeResult BuildTFGraph(base::AccountingAllocator* allocator, |
+ TFBuilder* builder, FunctionBody& body) { |
Zone zone(allocator); |
- SR_WasmDecoder decoder(&zone, builder, body); |
+ WasmFullDecoder decoder(&zone, builder, body); |
decoder.Decode(); |
- return decoder.toResult<Tree*>(nullptr); |
-} |
- |
-std::ostream& operator<<(std::ostream& os, const Tree& tree) { |
- if (tree.pc == nullptr) { |
- os << "null"; |
- return os; |
- } |
- PrintF("%s", WasmOpcodes::OpcodeName(tree.opcode())); |
- if (tree.count > 0) os << "("; |
- for (uint32_t i = 0; i < tree.count; ++i) { |
- if (i > 0) os << ", "; |
- os << *tree.children[i]; |
- } |
- if (tree.count > 0) os << ")"; |
- return os; |
+ return decoder.toResult<DecodeStruct*>(nullptr); |
} |
unsigned OpcodeLength(const byte* pc, const byte* end) { |
@@ -1550,7 +1524,7 @@ bool PrintAst(base::AccountingAllocator* allocator, const FunctionBody& body, |
std::ostream& os, |
std::vector<std::tuple<uint32_t, int, int>>* offset_table) { |
Zone zone(allocator); |
- SR_WasmDecoder decoder(&zone, nullptr, body); |
+ WasmFullDecoder decoder(&zone, nullptr, body); |
int line_nr = 0; |
// Print the function signature. |
@@ -1679,7 +1653,7 @@ bool PrintAst(base::AccountingAllocator* allocator, const FunctionBody& body, |
BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, size_t num_locals, |
const byte* start, const byte* end) { |
FunctionBody body = {nullptr, nullptr, nullptr, start, end}; |
- SR_WasmDecoder decoder(zone, nullptr, body); |
+ WasmFullDecoder decoder(zone, nullptr, body); |
return decoder.AnalyzeLoopAssignmentForTesting(start, num_locals); |
} |