OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "test/unittests/test-utils.h" | 5 #include "test/unittests/test-utils.h" |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #include "test/common/wasm/test-signatures.h" | 9 #include "test/common/wasm/test-signatures.h" |
10 | 10 |
(...skipping 2651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2662 } | 2662 } |
2663 | 2663 |
2664 class BytecodeIteratorTest : public TestWithZone {}; | 2664 class BytecodeIteratorTest : public TestWithZone {}; |
2665 | 2665 |
2666 TEST_F(BytecodeIteratorTest, SimpleForeach) { | 2666 TEST_F(BytecodeIteratorTest, SimpleForeach) { |
2667 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)}; | 2667 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)}; |
2668 BytecodeIterator iter(code, code + sizeof(code)); | 2668 BytecodeIterator iter(code, code + sizeof(code)); |
2669 WasmOpcode expected[] = {kExprI8Const, kExprIf, kExprI8Const, | 2669 WasmOpcode expected[] = {kExprI8Const, kExprIf, kExprI8Const, |
2670 kExprElse, kExprI8Const, kExprEnd}; | 2670 kExprElse, kExprI8Const, kExprEnd}; |
2671 size_t pos = 0; | 2671 size_t pos = 0; |
2672 for (WasmOpcode opcode : iter) { | 2672 for (WasmOpcode opcode : iter.opcodes()) { |
2673 if (pos >= arraysize(expected)) { | 2673 if (pos >= arraysize(expected)) { |
2674 EXPECT_TRUE(false); | 2674 EXPECT_TRUE(false); |
2675 break; | 2675 break; |
2676 } | 2676 } |
2677 EXPECT_EQ(expected[pos++], opcode); | 2677 EXPECT_EQ(expected[pos++], opcode); |
2678 } | 2678 } |
2679 EXPECT_EQ(arraysize(expected), pos); | 2679 EXPECT_EQ(arraysize(expected), pos); |
2680 } | 2680 } |
2681 | 2681 |
2682 TEST_F(BytecodeIteratorTest, ForeachTwice) { | 2682 TEST_F(BytecodeIteratorTest, ForeachTwice) { |
2683 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)}; | 2683 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)}; |
2684 BytecodeIterator iter(code, code + sizeof(code)); | 2684 BytecodeIterator iter(code, code + sizeof(code)); |
2685 int count = 0; | 2685 int count = 0; |
2686 | 2686 |
2687 count = 0; | 2687 count = 0; |
2688 for (WasmOpcode opcode : iter) { | 2688 for (WasmOpcode opcode : iter.opcodes()) { |
2689 USE(opcode); | 2689 USE(opcode); |
2690 count++; | 2690 count++; |
2691 } | 2691 } |
2692 EXPECT_EQ(6, count); | 2692 EXPECT_EQ(6, count); |
2693 | 2693 |
2694 count = 0; | 2694 count = 0; |
2695 for (WasmOpcode opcode : iter) { | 2695 for (WasmOpcode opcode : iter.opcodes()) { |
2696 USE(opcode); | 2696 USE(opcode); |
2697 count++; | 2697 count++; |
2698 } | 2698 } |
2699 EXPECT_EQ(6, count); | 2699 EXPECT_EQ(6, count); |
2700 } | 2700 } |
2701 | 2701 |
| 2702 TEST_F(BytecodeIteratorTest, ForeachOffset) { |
| 2703 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)}; |
| 2704 BytecodeIterator iter(code, code + sizeof(code)); |
| 2705 int count = 0; |
| 2706 |
| 2707 count = 0; |
| 2708 for (auto offset : iter.offsets()) { |
| 2709 USE(offset); |
| 2710 count++; |
| 2711 } |
| 2712 EXPECT_EQ(6, count); |
| 2713 |
| 2714 count = 0; |
| 2715 for (auto offset : iter.offsets()) { |
| 2716 USE(offset); |
| 2717 count++; |
| 2718 } |
| 2719 EXPECT_EQ(6, count); |
| 2720 } |
| 2721 |
2702 TEST_F(BytecodeIteratorTest, WithAstDecls) { | 2722 TEST_F(BytecodeIteratorTest, WithAstDecls) { |
2703 byte code[] = {1, 1, kLocalI32, WASM_I8(9), WASM_I8(11)}; | 2723 byte code[] = {1, 1, kLocalI32, WASM_I8(9), WASM_I8(11)}; |
2704 AstLocalDecls decls(zone()); | 2724 AstLocalDecls decls(zone()); |
2705 BytecodeIterator iter(code, code + sizeof(code), &decls); | 2725 BytecodeIterator iter(code, code + sizeof(code), &decls); |
2706 | 2726 |
2707 EXPECT_EQ(3u, decls.decls_encoded_size); | 2727 EXPECT_EQ(3u, decls.decls_encoded_size); |
2708 EXPECT_EQ(3u, iter.pc_offset()); | 2728 EXPECT_EQ(3u, iter.pc_offset()); |
2709 EXPECT_TRUE(iter.has_next()); | 2729 EXPECT_TRUE(iter.has_next()); |
2710 EXPECT_EQ(kExprI8Const, iter.current()); | 2730 EXPECT_EQ(kExprI8Const, iter.current()); |
2711 iter.next(); | 2731 iter.next(); |
2712 EXPECT_TRUE(iter.has_next()); | 2732 EXPECT_TRUE(iter.has_next()); |
2713 EXPECT_EQ(kExprI8Const, iter.current()); | 2733 EXPECT_EQ(kExprI8Const, iter.current()); |
2714 iter.next(); | 2734 iter.next(); |
2715 EXPECT_FALSE(iter.has_next()); | 2735 EXPECT_FALSE(iter.has_next()); |
2716 } | 2736 } |
2717 | 2737 |
2718 } // namespace wasm | 2738 } // namespace wasm |
2719 } // namespace internal | 2739 } // namespace internal |
2720 } // namespace v8 | 2740 } // namespace v8 |
OLD | NEW |