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

Side by Side Diff: test/cctest/compiler/test-run-bytecode-graph-builder.cc

Issue 1570623007: [Interpreter] Add support for CallRuntimeForPair to Bytecode Graph Builder. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_eval
Patch Set: Created 4 years, 11 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 unified diff | Download patch
OLDNEW
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 <utility> 5 #include <utility>
6 6
7 #include "src/compiler/pipeline.h" 7 #include "src/compiler/pipeline.h"
8 #include "src/execution.h" 8 #include "src/execution.h"
9 #include "src/handles.h" 9 #include "src/handles.h"
10 #include "src/interpreter/bytecode-array-builder.h" 10 #include "src/interpreter/bytecode-array-builder.h"
(...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 function_epilogue); 1095 function_epilogue);
1096 1096
1097 BytecodeGraphTester tester(isolate, zone, script.start(), "t"); 1097 BytecodeGraphTester tester(isolate, zone, script.start(), "t");
1098 auto callable = tester.GetCallable<>(); 1098 auto callable = tester.GetCallable<>();
1099 Handle<Object> return_value = callable().ToHandleChecked(); 1099 Handle<Object> return_value = callable().ToHandleChecked();
1100 CHECK(return_value->SameValue(*snippets[i].return_value())); 1100 CHECK(return_value->SameValue(*snippets[i].return_value()));
1101 } 1101 }
1102 } 1102 }
1103 1103
1104 1104
1105 TEST(BytecodeGraphBuilderEval) {
1106 HandleAndZoneScope scope;
1107 Isolate* isolate = scope.main_isolate();
1108 Zone* zone = scope.main_zone();
1109 Factory* factory = isolate->factory();
1110
1111 ExpectedSnippet<0> snippets[] = {
1112 {"return eval('1;');", {handle(Smi::FromInt(1), isolate)}},
1113 {"return eval('100 * 20;');", {handle(Smi::FromInt(2000), isolate)}},
1114 {"var x = 10; return eval('x + 20;');",
1115 {handle(Smi::FromInt(30), isolate)}},
1116 {"var x = 10; eval('x = 33;'); return x;",
1117 {handle(Smi::FromInt(33), isolate)}},
1118 {"'use strict'; var x = 20; var z = 0;\n"
1119 "eval('var x = 33; z = x;'); return x + z;",
1120 {handle(Smi::FromInt(53), isolate)}},
1121 {"eval('var x = 33;'); eval('var y = x + 20'); return x + y;",
1122 {handle(Smi::FromInt(86), isolate)}},
1123 {"var x = 1; eval('for(i = 0; i < 10; i++) x = x + 1;'); return x",
1124 {handle(Smi::FromInt(11), isolate)}},
1125 {"var x = 10; eval('var x = 20;'); return x;",
1126 {handle(Smi::FromInt(20), isolate)}},
1127 {"var x = 1; eval('\"use strict\"; var x = 2;'); return x;",
1128 {handle(Smi::FromInt(1), isolate)}},
1129 {"'use strict'; var x = 1; eval('var x = 2;'); return x;",
1130 {handle(Smi::FromInt(1), isolate)}},
1131 {"var x = 10; eval('x + 20;'); return typeof x;",
1132 {factory->NewStringFromStaticChars("number")}},
1133 {"eval('var y = 10;'); return typeof unallocated;",
1134 {factory->NewStringFromStaticChars("undefined")}},
1135 {"'use strict'; eval('var y = 10;'); return typeof unallocated;",
1136 {factory->NewStringFromStaticChars("undefined")}},
1137 {"eval('var x = 10;'); return typeof x;",
1138 {factory->NewStringFromStaticChars("number")}},
1139 {"var x = {}; eval('var x = 10;'); return typeof x;",
1140 {factory->NewStringFromStaticChars("number")}},
1141 {"'use strict'; var x = {}; eval('var x = 10;'); return typeof x;",
1142 {factory->NewStringFromStaticChars("object")}},
1143 };
1144
1145 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1146 for (size_t i = 0; i < num_snippets; i++) {
1147 ScopedVector<char> script(1024);
1148 SNPrintF(script, "function %s() { %s }\n%s();", kFunctionName,
1149 snippets[i].code_snippet, kFunctionName);
1150 BytecodeGraphTester tester(isolate, zone, script.start());
1151 auto callable = tester.GetCallable<>();
1152 Handle<Object> return_value = callable().ToHandleChecked();
1153 CHECK(return_value->SameValue(*snippets[i].return_value()));
1154 }
1155 }
1156
1157
1158 TEST(BytecodeGraphBuilderEvalParams) {
1159 HandleAndZoneScope scope;
1160 Isolate* isolate = scope.main_isolate();
1161 Zone* zone = scope.main_zone();
1162
1163 ExpectedSnippet<1> snippets[] = {
1164 {"var x = 10; return eval('x + p1;');",
1165 {handle(Smi::FromInt(30), isolate), handle(Smi::FromInt(20), isolate)}},
1166 {"var x = 10; eval('p1 = x;'); return p1;",
1167 {handle(Smi::FromInt(10), isolate), handle(Smi::FromInt(20), isolate)}},
1168 {"var a = 10;"
1169 "function inner() { return eval('a + p1;');}"
1170 "return inner();",
1171 {handle(Smi::FromInt(30), isolate), handle(Smi::FromInt(20), isolate)}},
1172 };
1173
1174 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1175 for (size_t i = 0; i < num_snippets; i++) {
1176 ScopedVector<char> script(1024);
1177 SNPrintF(script, "function %s(p1) { %s }\n%s(0);", kFunctionName,
1178 snippets[i].code_snippet, kFunctionName);
1179 BytecodeGraphTester tester(isolate, zone, script.start());
1180 auto callable = tester.GetCallable<Handle<Object>>();
1181 Handle<Object> return_value =
1182 callable(snippets[i].parameter(0)).ToHandleChecked();
1183 CHECK(return_value->SameValue(*snippets[i].return_value()));
1184 }
1185 }
1186
1187
1188 TEST(BytecodeGraphBuilderEvalGlobal) {
1189 HandleAndZoneScope scope;
1190 Isolate* isolate = scope.main_isolate();
1191 Zone* zone = scope.main_zone();
1192 Factory* factory = isolate->factory();
1193
1194 ExpectedSnippet<0> snippets[] = {
1195 {"function add_global() { eval('function f() { z = 33; }; f()'); };"
1196 "function f() { add_global(); return z; }; f();",
1197 {handle(Smi::FromInt(33), isolate)}},
1198 {"function add_global() {\n"
1199 " eval('\"use strict\"; function f() { y = 33; };"
1200 " try { f() } catch(e) {}');\n"
1201 "}\n"
1202 "function f() { add_global(); return typeof y; } f();",
1203 {factory->NewStringFromStaticChars("undefined")}},
1204 };
1205
1206 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1207 for (size_t i = 0; i < num_snippets; i++) {
1208 BytecodeGraphTester tester(isolate, zone, snippets[i].code_snippet);
1209 auto callable = tester.GetCallable<>();
1210 Handle<Object> return_value = callable().ToHandleChecked();
1211 CHECK(return_value->SameValue(*snippets[i].return_value()));
1212 }
1213 }
1214
1215
1105 bool get_compare_result(Token::Value opcode, Handle<Object> lhs_value, 1216 bool get_compare_result(Token::Value opcode, Handle<Object> lhs_value,
1106 Handle<Object> rhs_value) { 1217 Handle<Object> rhs_value) {
1107 switch (opcode) { 1218 switch (opcode) {
1108 case Token::Value::EQ: 1219 case Token::Value::EQ:
1109 return Object::Equals(lhs_value, rhs_value).FromJust(); 1220 return Object::Equals(lhs_value, rhs_value).FromJust();
1110 case Token::Value::NE: 1221 case Token::Value::NE:
1111 return !Object::Equals(lhs_value, rhs_value).FromJust(); 1222 return !Object::Equals(lhs_value, rhs_value).FromJust();
1112 case Token::Value::EQ_STRICT: 1223 case Token::Value::EQ_STRICT:
1113 return lhs_value->StrictEquals(*rhs_value); 1224 return lhs_value->StrictEquals(*rhs_value);
1114 case Token::Value::NE_STRICT: 1225 case Token::Value::NE_STRICT:
(...skipping 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after
2188 callable(factory->NewNumberFromInt(a)).ToHandleChecked(); 2299 callable(factory->NewNumberFromInt(a)).ToHandleChecked();
2189 static const int results[] = {11, 12, 2}; 2300 static const int results[] = {11, 12, 2};
2190 CHECK_EQ(Handle<Smi>::cast(return_val)->value(), results[a]); 2301 CHECK_EQ(Handle<Smi>::cast(return_val)->value(), results[a]);
2191 } 2302 }
2192 } 2303 }
2193 } 2304 }
2194 2305
2195 } // namespace compiler 2306 } // namespace compiler
2196 } // namespace internal 2307 } // namespace internal
2197 } // namespace v8 2308 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698