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

Side by Side Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1390483002: [Interpreter] Unary operators - typeof, void, and logical not. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. 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 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 "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/interpreter/bytecode-array-iterator.h" 8 #include "src/interpreter/bytecode-array-iterator.h"
9 #include "src/interpreter/bytecode-generator.h" 9 #include "src/interpreter/bytecode-generator.h"
10 #include "src/interpreter/interpreter.h" 10 #include "src/interpreter/interpreter.h"
(...skipping 1242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 0}, 1253 0},
1254 }; 1254 };
1255 1255
1256 for (size_t i = 0; i < arraysize(snippets); i++) { 1256 for (size_t i = 0; i < arraysize(snippets); i++) {
1257 Handle<BytecodeArray> bytecode_array = 1257 Handle<BytecodeArray> bytecode_array =
1258 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 1258 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
1259 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 1259 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
1260 } 1260 }
1261 } 1261 }
1262 1262
1263
1264 TEST(UnaryOperators) {
1265 InitializedHandleScope handle_scope;
1266 BytecodeGeneratorHelper helper;
1267
1268 ExpectedSnippet<int> snippets[] = {
1269 {"var x = 0;"
1270 "while (x != 10) {"
1271 " x = x + 10;"
1272 "}"
1273 "return x;",
1274 2 * kPointerSize,
1275 1,
1276 29,
1277 {
1278 B(LdaZero), // 0
1279 B(Star), R(0), // 1
1280 B(Jump), U8(12), // 3
1281 B(Ldar), R(0), // 5
1282 B(Star), R(1), // 7
1283 B(LdaSmi8), U8(10), // 9
1284 B(Add), R(1), // 11
1285 B(Star), R(0), // 13
1286 B(Ldar), R(0), // 15
1287 B(Star), R(1), // 17
1288 B(LdaSmi8), U8(10), // 19
1289 B(TestEqual), R(1), // 21
1290 B(LogicalNot), // 23
1291 B(JumpIfTrue), U8(-19), // 24
1292 B(Ldar), R(0), // 26
1293 B(Return), // 28
1294 },
1295 0},
1296 {"var x = false;"
1297 "do {"
1298 " x = !x;"
1299 "} while(x == false);"
1300 "return x;",
1301 2 * kPointerSize,
1302 1,
1303 20,
1304 {
1305 B(LdaFalse), // 0
1306 B(Star), R(0), // 1
1307 B(Ldar), R(0), // 3
1308 B(LogicalNot), // 5
1309 B(Star), R(0), // 6
1310 B(Ldar), R(0), // 8
1311 B(Star), R(1), // 10
1312 B(LdaFalse), // 12
1313 B(TestEqual), R(1), // 13
1314 B(JumpIfTrue), U8(-12), // 15
1315 B(Ldar), R(0), // 17
1316 B(Return), // 19
rmcilroy 2015/10/06 10:39:15 nit - be consistent (either bytecode numbers for a
oth 2015/10/06 12:35:06 Done.
oth 2015/10/06 13:52:09 Done.
1317 },
1318 0},
1319 {"var x = 101;"
1320 "return void(x * 3);",
1321 2 * kPointerSize,
1322 1,
1323 14,
1324 {
1325 B(LdaSmi8), U8(101), //
1326 B(Star), R(0), //
1327 B(Ldar), R(0), //
1328 B(Star), R(1), //
1329 B(LdaSmi8), U8(3), //
1330 B(Mul), R(1), //
1331 B(LdaUndefined), //
1332 B(Return), //
1333 },
1334 0},
1335 {"var x = 1234;"
1336 "var y = void (x * x - 1);"
1337 "return y;",
1338 4 * kPointerSize,
1339 1,
1340 24,
1341 {
1342 B(LdaConstant), U8(0), // 0
1343 B(Star), R(0), // 2
1344 B(Ldar), R(0), // 4
1345 B(Star), R(3), // 6
1346 B(Ldar), R(0), // 8
1347 B(Mul), R(3), // 10
1348 B(Star), R(2), // 12
1349 B(LdaSmi8), U8(1), // 14
1350 B(Sub), R(2), // 16
1351 B(LdaUndefined), // 18
1352 B(Star), R(1), // 19
1353 B(Ldar), R(1), // 21
1354 B(Return), // 23
1355 },
1356 1, {1234}},
1357 {"var x = 13;"
1358 "return typeof(x);",
1359 1 * kPointerSize,
1360 1,
1361 8,
1362 {
1363 B(LdaSmi8), U8(13), //
1364 B(Star), R(0), //
1365 B(Ldar), R(0), //
1366 B(TypeOf), //
1367 B(Return), //
1368 },
1369 0},
1370 };
1371
1372 for (size_t i = 0; i < arraysize(snippets); i++) {
1373 Handle<BytecodeArray> bytecode_array =
1374 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
1375 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
1376 }
1377 }
1378
1379
1263 } // namespace interpreter 1380 } // namespace interpreter
1264 } // namespace internal 1381 } // namespace internal
1265 } // namespace v8 1382 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698