Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(896)

Unified Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1369123002: [Interpreter] Add interpreter support for compare ops and ToBoolean. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Incorporate review feedback from mstarzinger and rmcilroy. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/runtime/runtime-interpreter.cc ('k') | test/cctest/interpreter/test-interpreter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 280855238d4aa5ab4dde97abd2921f2606fd2c55..0889f30e055cf1d1786499a1aa25c677f68eaa92 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() {
@@ -470,7 +470,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);
}
}
@@ -573,7 +573,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);
}
}
@@ -651,7 +651,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);
}
}
@@ -681,7 +681,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);
}
}
@@ -737,7 +736,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,
@@ -753,7 +752,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,
@@ -768,9 +767,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,
@@ -785,26 +784,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,
@@ -820,27 +821,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,
@@ -868,11 +853,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
+ " /* if (a !== b) { return 1; } */" // UNARY NOT, rather than !=/!==.
+ " 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);
}
}
« no previous file with comments | « src/runtime/runtime-interpreter.cc ('k') | test/cctest/interpreter/test-interpreter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698