| 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 b8ee068f37507cededb3c7426bea41f9c86bfb2b..fb3843f220a1ea40d06c5d393a970577dd9ad654 100644
|
| --- a/test/cctest/interpreter/test-bytecode-generator.cc
|
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc
|
| @@ -18,7 +18,7 @@ class BytecodeGeneratorHelper {
|
| public:
|
| const char* kFunctionName = "f";
|
|
|
| - const int kLastParamIndex =
|
| + static const int kLastParamIndex =
|
| -InterpreterFrameConstants::kLastParamFromRegisterPointer / kPointerSize;
|
|
|
| BytecodeGeneratorHelper() {
|
| @@ -469,7 +469,7 @@ TEST(PropertyLoads) {
|
| {"name"}}};
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| - helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| + helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
|
| CheckBytecodeArrayEqual(snippets[i], bytecode_array);
|
| }
|
| }
|
| @@ -571,7 +571,7 @@ TEST(PropertyStores) {
|
| {"name"}}};
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| - helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| + helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
|
| CheckBytecodeArrayEqual(snippets[i], bytecode_array);
|
| }
|
| }
|
| @@ -648,7 +648,7 @@ TEST(PropertyCall) {
|
| {"func"}}};
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| - helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| + helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
|
| CheckBytecodeArrayEqual(snippets[i], bytecode_array);
|
| }
|
| }
|
| @@ -678,7 +678,6 @@ TEST(LoadGlobal) {
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| - bytecode_array->Print();
|
| CheckBytecodeArrayEqual(snippets[i], bytecode_array, true);
|
| }
|
| }
|
| @@ -734,7 +733,7 @@ TEST(IfConditions) {
|
| Handle<Object> unused = helper.factory()->undefined_value();
|
|
|
| ExpectedSnippet<Handle<Object>> snippets[] = {
|
| - {"function f() { if (0) { return 1; } else { return -1; } }",
|
| + {"function f() { if (0) { return 1; } else { return -1; } } f()",
|
| 0,
|
| 1,
|
| 14,
|
| @@ -750,7 +749,7 @@ TEST(IfConditions) {
|
| B(Return)}, //
|
| 0,
|
| {unused, unused, unused, unused}},
|
| - {"function f() { if ('lucky') { return 1; } else { return -1; } }",
|
| + {"function f() { if ('lucky') { return 1; } else { return -1; } } f();",
|
| 0,
|
| 1,
|
| 15,
|
| @@ -765,9 +764,9 @@ TEST(IfConditions) {
|
| B(LdaUndefined), //
|
| B(Return)}, //
|
| 1,
|
| - {helper.factory()->NewStringFromStaticChars("lucky"), unused,
|
| - unused, unused}},
|
| - {"function f() { if (false) { return 1; } else { return -1; } }",
|
| + {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused,
|
| + unused}},
|
| + {"function f() { if (false) { return 1; } else { return -1; } } f();",
|
| 0,
|
| 1,
|
| 13,
|
| @@ -782,26 +781,28 @@ TEST(IfConditions) {
|
| B(Return)}, //
|
| 0,
|
| {unused, unused, unused, unused}},
|
| - {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }",
|
| + {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }"
|
| + "f(99);",
|
| kPointerSize,
|
| 2,
|
| 19,
|
| - {B(Ldar), R(-5), //
|
| - B(Star), R(0), //
|
| - B(LdaZero), //
|
| - B(TestLessThanEqual), R(0), //
|
| - B(JumpIfFalse), U8(7), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Return), //
|
| - B(Jump), U8(5), // TODO(oth): Unreachable jump after return
|
| - B(LdaConstant), U8(1), //
|
| - B(Return), //
|
| - B(LdaUndefined), //
|
| - B(Return)}, //
|
| + {B(Ldar), R(-5), //
|
| + B(Star), R(0), //
|
| + B(LdaZero), //
|
| + B(TestLessThanOrEqual), R(0), //
|
| + B(JumpIfFalse), U8(7), //
|
| + B(LdaConstant), U8(0), //
|
| + B(Return), //
|
| + B(Jump), U8(5), // TODO(oth): Unreachable jump after return
|
| + B(LdaConstant), U8(1), //
|
| + B(Return), //
|
| + B(LdaUndefined), //
|
| + B(Return)}, //
|
| 2,
|
| {helper.factory()->NewNumberFromInt(200),
|
| helper.factory()->NewNumberFromInt(-200), unused, unused}},
|
| - {"function f(a, b) { if (a in b) { return 200; } }",
|
| + {"function f(a, b) { if (a in b) { return 200; } }"
|
| + "f('prop', { prop: 'yes'});",
|
| kPointerSize,
|
| 3,
|
| 17,
|
| @@ -817,27 +818,11 @@ TEST(IfConditions) {
|
| B(Return)}, //
|
| 1,
|
| {helper.factory()->NewNumberFromInt(200), unused, unused, unused}},
|
| - {"function f(a, b) { if (a instanceof b) { return 200; } }",
|
| - kPointerSize,
|
| - 3,
|
| - 17,
|
| - {B(Ldar), R(-6), //
|
| - B(Star), R(0), //
|
| - B(Ldar), R(-5), //
|
| - B(TestInstanceOf), R(0), //
|
| - B(JumpIfFalse), U8(7), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Return), //
|
| - B(Jump), U8(2), // TODO(oth): Unreachable jump after return
|
| - B(LdaUndefined), //
|
| - B(Return)}, //
|
| - 1,
|
| - {helper.factory()->NewNumberFromInt(200), unused, unused, unused}},
|
| {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { "
|
| #define X "b = a; a = b; "
|
| X X X X X X X X X X X X X X X X X X X X X X X X
|
| #undef X
|
| - " return 200; } else { return -200; } }",
|
| + " return 200; } else { return -200; } } f(0.001)",
|
| 3 * kPointerSize,
|
| 2,
|
| 218,
|
| @@ -865,11 +850,51 @@ TEST(IfConditions) {
|
| {helper.factory()->NewHeapNumber(0.01),
|
| helper.factory()->NewNumberFromInt(200),
|
| helper.factory()->NewNumberFromInt(199),
|
| - helper.factory()->NewNumberFromInt(-200)}}};
|
| + helper.factory()->NewNumberFromInt(-200)}},
|
| + {"function f(a, b) {\n"
|
| + "if (a == b) { return 1; }\n"
|
| + "if (a === b) { return 1; }\n"
|
| + "if (a < b) { return 1; }\n"
|
| + "if (a > b) { return 1; }\n"
|
| + "if (a <= b) { return 1; }\n"
|
| + "if (a >= b) { return 1; }\n"
|
| + "if (a in b) { return 1; }\n"
|
| + "if (a instanceof b) { return 1; }\n"
|
| + "/* if (a != b) { return 1; } */" // TODO(oth) Ast visitor yields unary
|
| + "/* if (a !== b) { return 1; } */" // NOT, rather than not-equals ops.
|
| + "return 0;\n"
|
| + "} f(1,1);",
|
| + kPointerSize,
|
| + 3,
|
| + 122,
|
| + {
|
| +#define IF_CONDITION_RETURN(condition) \
|
| + B(Ldar), R(-6), \
|
| + B(Star), R(0), \
|
| + B(Ldar), R(-5), \
|
| + B(condition), R(0), \
|
| + B(JumpIfFalse), U8(7), \
|
| + B(LdaSmi8), U8(1), \
|
| + B(Return), \
|
| + B(Jump), U8(2),
|
| + IF_CONDITION_RETURN(TestEqual) //
|
| + IF_CONDITION_RETURN(TestEqualStrict) //
|
| + IF_CONDITION_RETURN(TestLessThan) //
|
| + IF_CONDITION_RETURN(TestGreaterThan) //
|
| + IF_CONDITION_RETURN(TestLessThanOrEqual) //
|
| + IF_CONDITION_RETURN(TestGreaterThanOrEqual) //
|
| + IF_CONDITION_RETURN(TestIn) //
|
| + IF_CONDITION_RETURN(TestInstanceOf) //
|
| +#undef IF_CONDITION_RETURN
|
| + B(LdaZero), //
|
| + B(Return)}, //
|
| + 0,
|
| + {unused, unused, unused, unused}},
|
| + };
|
|
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| - helper.MakeBytecodeForFunction(snippets[i].code_snippet);
|
| + helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
|
| CheckBytecodeArrayEqual(snippets[i], bytecode_array);
|
| }
|
| }
|
|
|