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

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

Issue 1403943004: [Interpreter] Add support for local context loads and stores. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_contextchain
Patch Set: Add back outer_ &&] Created 5 years, 2 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
Index: test/cctest/interpreter/test-interpreter.cc
diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc
index 87379bc73684b1d4dd658160b8cc0c6341058c27..c846c105e420bc76405f6b9985497ad51bb7bb49 100644
--- a/test/cctest/interpreter/test-interpreter.cc
+++ b/test/cctest/interpreter/test-interpreter.cc
@@ -172,6 +172,7 @@ TEST(InterpreterReturn) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -190,6 +191,7 @@ TEST(InterpreterLoadUndefined) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadUndefined().Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -207,6 +209,7 @@ TEST(InterpreterLoadNull) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadNull().Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -225,6 +228,7 @@ TEST(InterpreterLoadTheHole) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadTheHole().Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -242,6 +246,7 @@ TEST(InterpreterLoadTrue) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadTrue().Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -259,6 +264,7 @@ TEST(InterpreterLoadFalse) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadFalse().Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -278,6 +284,7 @@ TEST(InterpreterLoadLiteral) {
for (int i = -128; i < 128; i++) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(Smi::FromInt(i)).Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -292,6 +299,7 @@ TEST(InterpreterLoadLiteral) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(Smi::FromInt(0x12345678)).Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -306,6 +314,7 @@ TEST(InterpreterLoadLiteral) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(factory->NewHeapNumber(-2.1e19)).Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -320,6 +329,7 @@ TEST(InterpreterLoadLiteral) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
Handle<i::String> string = factory->NewStringFromAsciiChecked("String");
builder.LoadLiteral(string).Return();
@@ -339,6 +349,7 @@ TEST(InterpreterLoadStoreRegisters) {
for (int i = 0; i <= Register::kMaxRegisterIndex; i++) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(i + 1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
Register reg(i);
builder.LoadTrue()
@@ -424,6 +435,7 @@ TEST(InterpreterShiftOpsSmi) {
BytecodeArrayBuilder builder(handles.main_isolate(),
handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
Register reg(0);
int lhs = lhs_inputs[l];
@@ -458,6 +470,7 @@ TEST(InterpreterBinaryOpsSmi) {
BytecodeArrayBuilder builder(handles.main_isolate(),
handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
Register reg(0);
int lhs = lhs_inputs[l];
@@ -493,6 +506,7 @@ TEST(InterpreterBinaryOpsHeapNumber) {
BytecodeArrayBuilder builder(handles.main_isolate(),
handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
Register reg(0);
double lhs = lhs_inputs[l];
@@ -551,6 +565,7 @@ TEST(InterpreterStringAdd) {
for (size_t i = 0; i < arraysize(test_cases); i++) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
Register reg(0);
builder.LoadLiteral(test_cases[i].lhs)
@@ -572,6 +587,7 @@ TEST(InterpreterParameter1) {
HandleAndZoneScope handles;
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadAccumulatorWithRegister(builder.Parameter(0)).Return();
Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
@@ -595,6 +611,7 @@ TEST(InterpreterParameter8) {
HandleAndZoneScope handles;
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(8);
builder.LoadAccumulatorWithRegister(builder.Parameter(0))
.BinaryOperation(Token::Value::ADD, builder.Parameter(1), Strength::WEAK)
@@ -631,6 +648,7 @@ TEST(InterpreterParameter1Assign) {
HandleAndZoneScope handles;
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(Smi::FromInt(5))
.StoreAccumulatorInRegister(builder.Parameter(0))
@@ -760,6 +778,7 @@ TEST(InterpreterLoadNamedProperty) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.LoadNamedProperty(builder.Parameter(0), vector->GetIndex(slot),
@@ -816,6 +835,7 @@ TEST(InterpreterLoadKeyedProperty) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(key)
.LoadKeyedProperty(builder.Parameter(0), vector->GetIndex(slot),
@@ -860,6 +880,7 @@ TEST(InterpreterStoreNamedProperty) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.StoreAccumulatorInRegister(Register(0))
@@ -922,6 +943,7 @@ TEST(InterpreterStoreKeyedProperty) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.StoreAccumulatorInRegister(Register(0))
@@ -974,6 +996,7 @@ TEST(InterpreterCall) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.LoadNamedProperty(builder.Parameter(0), slot_index, i::SLOPPY)
@@ -995,6 +1018,7 @@ TEST(InterpreterCall) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.LoadNamedProperty(builder.Parameter(0), slot_index, i::SLOPPY)
@@ -1019,6 +1043,7 @@ TEST(InterpreterCall) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(4);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.LoadNamedProperty(builder.Parameter(0), slot_index, i::SLOPPY)
@@ -1048,6 +1073,7 @@ TEST(InterpreterCall) {
{
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(12);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(name)
.LoadNamedProperty(builder.Parameter(0), slot_index, i::SLOPPY)
@@ -1121,6 +1147,7 @@ TEST(InterpreterJumps) {
HandleAndZoneScope handles;
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(2);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
Register reg(0), scratch(1);
BytecodeLabel label[3];
@@ -1149,6 +1176,7 @@ TEST(InterpreterConditionalJumps) {
HandleAndZoneScope handles;
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(2);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
Register reg(0), scratch(1);
BytecodeLabel label[2];
@@ -1237,6 +1265,7 @@ TEST(InterpreterSmiComparisons) {
handles.main_zone());
Register r0(0);
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.LoadLiteral(Smi::FromInt(inputs[i]))
.StoreAccumulatorInRegister(r0)
@@ -1275,6 +1304,7 @@ TEST(InterpreterHeapNumberComparisons) {
handles.main_zone());
Register r0(0);
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.LoadLiteral(factory->NewHeapNumber(inputs[i]))
.StoreAccumulatorInRegister(r0)
@@ -1310,6 +1340,7 @@ TEST(InterpreterStringComparisons) {
handles.main_zone());
Register r0(0);
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.LoadLiteral(factory->NewStringFromAsciiChecked(lhs))
.StoreAccumulatorInRegister(r0)
@@ -1356,6 +1387,7 @@ TEST(InterpreterMixedComparisons) {
handles.main_zone());
Register r0(0);
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
if (pass == 0) {
// Comparison with HeapNumber on the lhs and String on the rhs
@@ -1400,6 +1432,7 @@ TEST(InterpreterInstanceOf) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
Register r0(0);
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.LoadLiteral(cases[i]);
builder.StoreAccumulatorInRegister(r0)
@@ -1430,6 +1463,7 @@ TEST(InterpreterTestIn) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
Register r0(0);
builder.set_locals_count(1);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.LoadLiteral(factory->NewStringFromAsciiChecked(properties[i]))
.StoreAccumulatorInRegister(r0)
@@ -1454,6 +1488,7 @@ TEST(InterpreterUnaryNot) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
Register r0(0);
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.EnterBlock();
builder.LoadFalse();
@@ -1517,6 +1552,7 @@ TEST(InterpreterToBoolean) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
Register r0(0);
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.EnterBlock();
LoadAny(&builder, factory, object_type_tuples[i].first);
@@ -1554,6 +1590,7 @@ TEST(InterpreterUnaryNotNonBoolean) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
Register r0(0);
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.EnterBlock();
LoadAny(&builder, factory, object_type_tuples[i].first);
@@ -1589,6 +1626,7 @@ TEST(InterpreterTypeOf) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
Register r0(0);
builder.set_locals_count(0);
+ builder.set_context_count(0);
builder.set_parameter_count(0);
builder.EnterBlock();
LoadAny(&builder, factory, object_type_tuples[i].first);
@@ -1610,6 +1648,7 @@ TEST(InterpreterCallRuntime) {
BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone());
builder.set_locals_count(2);
+ builder.set_context_count(0);
builder.set_parameter_count(1);
builder.LoadLiteral(Smi::FromInt(15))
.StoreAccumulatorInRegister(Register(0))
@@ -1728,6 +1767,67 @@ TEST(InterpreterObjectLiterals) {
}
+TEST(InterpreterContextVariables) {
+ HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+
+ std::pair<const char*, Handle<Object>> context_vars[5] = {
+ std::make_pair("var a; (function() { a = 1; })(); return a;",
+ Handle<Object>(Smi::FromInt(1), isolate)),
+ std::make_pair("var a = 10; (function() { a; })(); return a;",
+ Handle<Object>(Smi::FromInt(10), isolate)),
+ std::make_pair("var a = 20; var b = 30;\n"
+ "return (function() { return a + b; })();",
+ Handle<Object>(Smi::FromInt(50), isolate)),
+ std::make_pair("'use strict'; let a = 1;\n"
+ "{ let b = 2; return (function() { return a + b; })(); }",
+ Handle<Object>(Smi::FromInt(3), isolate)),
+ std::make_pair("'use strict'; let a = 10;\n"
+ "{ let b = 20; var c = function() { [a, b] };\n"
+ " return a + b; }",
+ Handle<Object>(Smi::FromInt(30), isolate)),
+ };
+
+ for (size_t i = 0; i < arraysize(context_vars); i++) {
+ std::string source(InterpreterTester::SourceForBody(context_vars[i].first));
+ InterpreterTester tester(handles.main_isolate(), source.c_str());
+ auto callable = tester.GetCallable<>();
+
+ Handle<i::Object> return_value = callable().ToHandleChecked();
+ CHECK(return_value->SameValue(*context_vars[i].second));
+ }
+}
+
+
+TEST(InterpreterContextParameters) {
+ HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+
+ std::pair<const char*, Handle<Object>> context_params[3] = {
+ std::make_pair("return (function() { return arg1; })();",
+ Handle<Object>(Smi::FromInt(1), isolate)),
+ std::make_pair("(function() { arg1 = 4; })(); return arg1;",
+ Handle<Object>(Smi::FromInt(4), isolate)),
+ std::make_pair("(function() { arg3 = arg2 - arg1; })(); return arg3;",
+ Handle<Object>(Smi::FromInt(1), isolate)),
+ };
+
+ for (size_t i = 0; i < arraysize(context_params); i++) {
+ std::string source = "function " + InterpreterTester::function_name() +
+ "(arg1, arg2, arg3) {" + context_params[i].first + "}";
+ InterpreterTester tester(handles.main_isolate(), source.c_str());
+ auto callable =
+ tester.GetCallable<Handle<Object>, Handle<Object>, Handle<Object>>();
+
+ Handle<Object> a1 = Handle<Object>(Smi::FromInt(1), isolate);
+ Handle<Object> a2 = Handle<Object>(Smi::FromInt(2), isolate);
+ Handle<Object> a3 = Handle<Object>(Smi::FromInt(3), isolate);
+ Handle<i::Object> return_value = callable(a1, a2, a3).ToHandleChecked();
+ CHECK(return_value->SameValue(*context_params[i].second));
+ }
+}
+
+
TEST(InterpreterComma) {
HandleAndZoneScope handles;
i::Isolate* isolate = handles.main_isolate();
« no previous file with comments | « test/cctest/interpreter/test-bytecode-generator.cc ('k') | test/unittests/compiler/bytecode-graph-builder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698