Chromium Code Reviews| Index: test/cctest/interpreter/test-bytecode-generator.cc |
| diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc |
| index a5cb12aceab8db2947e25f8178c25c7f934d9001..187c5efb72b44b5fc78cc3e431fd106f4f570139 100644 |
| --- a/test/cctest/interpreter/test-bytecode-generator.cc |
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc |
| @@ -1892,110 +1892,202 @@ TEST(UnaryOperators) { |
| InitializedHandleScope handle_scope; |
| BytecodeGeneratorHelper helper; |
| - ExpectedSnippet<int> snippets[] = { |
| - {"var x = 0;" |
| - "while (x != 10) {" |
| - " x = x + 10;" |
| - "}" |
| - "return x;", |
| - 2 * kPointerSize, |
| - 1, |
| - 29, |
| - { |
| - B(LdaZero), // |
| - B(Star), R(0), // |
| - B(Jump), U8(12), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| - B(LdaSmi8), U8(10), // |
| - B(Add), R(1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| - B(LdaSmi8), U8(10), // |
| - B(TestEqual), R(1), // |
| - B(LogicalNot), // |
| - B(JumpIfTrue), U8(-19), // |
| - B(Ldar), R(0), // |
| - B(Return), // |
| - }, |
| - 0}, |
| - {"var x = false;" |
| - "do {" |
| - " x = !x;" |
| - "} while(x == false);" |
| - "return x;", |
| + ExpectedSnippet<int> snippets[] = {{"var x = 0;" |
|
rmcilroy
2015/10/21 14:52:54
Could you restore this to the previous indenting p
mythria
2015/10/23 14:48:01
Done.
|
| + "while (x != 10) {" |
| + " x = x + 10;" |
| + "}" |
| + "return x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 29, |
| + { |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(Jump), U8(12), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(10), // |
| + B(Add), R(1), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(10), // |
| + B(TestEqual), R(1), // |
| + B(LogicalNot), // |
| + B(JumpIfTrue), U8(-19), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = false;" |
| + "do {" |
| + " x = !x;" |
| + "} while(x == false);" |
| + "return x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 20, |
| + { |
| + B(LdaFalse), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(LogicalNot), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaFalse), // |
| + B(TestEqual), R(1), // |
| + B(JumpIfTrue), U8(-12), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 101;" |
| + "return void(x * 3);", |
| + 2 * kPointerSize, |
| + 1, |
| + 14, |
| + { |
| + B(LdaSmi8), U8(101), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(3), // |
| + B(Mul), R(1), // |
| + B(LdaUndefined), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 1234;" |
| + "var y = void (x * x - 1);" |
| + "return y;", |
| + 4 * kPointerSize, |
| + 1, |
| + 24, |
| + { |
| + B(LdaConstant), U8(0), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(3), // |
| + B(Ldar), R(0), // |
| + B(Mul), R(3), // |
| + B(Star), R(2), // |
| + B(LdaSmi8), U8(1), // |
| + B(Sub), R(2), // |
| + B(LdaUndefined), // |
| + B(Star), R(1), // |
| + B(Ldar), R(1), // |
| + B(Return), // |
| + }, |
| + 1, |
| + {1234}}, |
| + {"var x = 13;" |
| + "return typeof(x);", |
| + 1 * kPointerSize, |
| + 1, |
| + 8, |
| + { |
| + B(LdaSmi8), U8(13), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(TypeOf), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 13;" |
| + "return ~x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 13, |
| + { |
| + B(LdaSmi8), U8(13), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(-1), // |
| + B(BitwiseXor), R(1), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 13;" |
| + "return +x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 13, |
| + { |
| + B(LdaSmi8), U8(13), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(1), // |
| + B(Mul), R(1), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 13;" |
| + "return -x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 13, |
| + { |
| + B(LdaSmi8), U8(13), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(-1), // |
| + B(Mul), R(1), // |
| + B(Return), // |
| + }, |
| + 0}}; |
| + |
| + |
| + for (size_t i = 0; i < arraysize(snippets); i++) { |
| + Handle<BytecodeArray> bytecode_array = |
| + helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| + CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| + } |
| +} |
| + |
| + |
| +TEST(UnaryDeleteOperator) { |
| + InitializedHandleScope handle_scope; |
| + BytecodeGeneratorHelper helper; |
| + |
| + int deep_elements_flags = |
| + ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
| + |
| + ExpectedSnippet<InstanceType> snippets[] = { |
| + {"var a = {x:13, y:14}; return delete a.x;", |
|
rmcilroy
2015/10/21 14:52:54
Could you add tests for the different types of del
mythria
2015/10/23 14:48:01
Done.
|
| 2 * kPointerSize, |
| 1, |
| - 20, |
| - { |
| - B(LdaFalse), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(LogicalNot), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| - B(LdaFalse), // |
| - B(TestEqual), R(1), // |
| - B(JumpIfTrue), U8(-12), // |
| - B(Ldar), R(0), // |
| - B(Return), // |
| - }, |
| - 0}, |
| - {"var x = 101;" |
| - "return void(x * 3);", |
| + 16, |
| + {B(LdaConstant), U8(0), // |
| + B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaConstant), U8(1), // |
| + B(DeletePropertySloppy), R(1), // |
| + B(Return)}, |
| + 2, |
| + {InstanceType::FIXED_ARRAY_TYPE, |
| + InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| + {"'use strict'; var a = {x:13, y:14}; return delete a.x;", |
| 2 * kPointerSize, |
| 1, |
| - 14, |
| - { |
| - B(LdaSmi8), U8(101), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| - B(LdaSmi8), U8(3), // |
| - B(Mul), R(1), // |
| - B(LdaUndefined), // |
| - B(Return), // |
| - }, |
| - 0}, |
| - {"var x = 1234;" |
| - "var y = void (x * x - 1);" |
| - "return y;", |
| - 4 * kPointerSize, |
| - 1, |
| - 24, |
| - { |
| - B(LdaConstant), U8(0), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(3), // |
| - B(Ldar), R(0), // |
| - B(Mul), R(3), // |
| - B(Star), R(2), // |
| - B(LdaSmi8), U8(1), // |
| - B(Sub), R(2), // |
| - B(LdaUndefined), // |
| - B(Star), R(1), // |
| - B(Ldar), R(1), // |
| - B(Return), // |
| - }, |
| - 1, |
| - {1234}}, |
| - {"var x = 13;" |
| - "return typeof(x);", |
| - 1 * kPointerSize, |
| - 1, |
| - 8, |
| - { |
| - B(LdaSmi8), U8(13), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(TypeOf), // |
| - B(Return), // |
| - }, |
| - 0}, |
| - }; |
| + 18, |
| + {B(LdaConstant), U8(0), B(LdaConstant), U8(1), // |
| + B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Star), R(1), // |
| + B(LdaConstant), U8(2), // |
| + B(DeletePropertyStrict), R(1), // |
| + B(Return)}, |
| + 3, |
| + {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
| + InstanceType::FIXED_ARRAY_TYPE, |
| + InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}}; |
| for (size_t i = 0; i < arraysize(snippets); i++) { |
| Handle<BytecodeArray> bytecode_array = |