OLD | NEW |
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 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 1 * kPointerSize, | 378 1 * kPointerSize, |
379 1, | 379 1, |
380 10, | 380 10, |
381 {B(LdaZero), // | 381 {B(LdaZero), // |
382 B(Star), R(0), // | 382 B(Star), R(0), // |
383 B(Ldar), R(0), // | 383 B(Ldar), R(0), // |
384 B(JumpIfToBooleanTrue), U8(4), // | 384 B(JumpIfToBooleanTrue), U8(4), // |
385 B(LdaSmi8), U8(3), // | 385 B(LdaSmi8), U8(3), // |
386 B(Return)}, | 386 B(Return)}, |
387 0}, | 387 0}, |
| 388 {"var x = 0; return (x == 1) || 3;", |
| 389 1 * kPointerSize, |
| 390 1, |
| 391 12, |
| 392 {B(LdaZero), // |
| 393 B(Star), R(0), // |
| 394 B(LdaSmi8), U8(1), // |
| 395 B(TestEqual), R(0), // |
| 396 B(JumpIfTrue), U8(4), // |
| 397 B(LdaSmi8), U8(3), // |
| 398 B(Return)}, |
| 399 0}, |
388 {"var x = 0; return x && 3;", | 400 {"var x = 0; return x && 3;", |
389 1 * kPointerSize, | 401 1 * kPointerSize, |
390 1, | 402 1, |
391 10, | 403 10, |
392 {B(LdaZero), // | 404 {B(LdaZero), // |
393 B(Star), R(0), // | 405 B(Star), R(0), // |
394 B(Ldar), R(0), // | 406 B(Ldar), R(0), // |
395 B(JumpIfToBooleanFalse), U8(4), // | 407 B(JumpIfToBooleanFalse), U8(4), // |
396 B(LdaSmi8), U8(3), // | 408 B(LdaSmi8), U8(3), // |
397 B(Return)}, | 409 B(Return)}, |
398 0}, | 410 0}, |
| 411 {"var x = 0; return (x == 0) && 3;", |
| 412 1 * kPointerSize, |
| 413 1, |
| 414 11, |
| 415 {B(LdaZero), // |
| 416 B(Star), R(0), // |
| 417 B(LdaZero), // |
| 418 B(TestEqual), R(0), // |
| 419 B(JumpIfFalse), U8(4), // |
| 420 B(LdaSmi8), U8(3), // |
| 421 B(Return)}, |
| 422 0}, |
399 {"var x = 0; return x || (1, 2, 3);", | 423 {"var x = 0; return x || (1, 2, 3);", |
400 1 * kPointerSize, | 424 1 * kPointerSize, |
401 1, | 425 1, |
402 10, | 426 10, |
403 {B(LdaZero), // | 427 {B(LdaZero), // |
404 B(Star), R(0), // | 428 B(Star), R(0), // |
405 B(Ldar), R(0), // | 429 B(Ldar), R(0), // |
406 B(JumpIfToBooleanTrue), U8(4), // | 430 B(JumpIfToBooleanTrue), U8(4), // |
407 B(LdaSmi8), U8(3), // | 431 B(LdaSmi8), U8(3), // |
408 B(Return)}, | 432 B(Return)}, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 B(Star), R(0), // | 483 B(Star), R(0), // |
460 B(LdaSmi8), U8(2), // | 484 B(LdaSmi8), U8(2), // |
461 B(Star), R(1), // | 485 B(Star), R(1), // |
462 B(LdaSmi8), U8(3), // | 486 B(LdaSmi8), U8(3), // |
463 B(Star), R(2), // | 487 B(Star), R(2), // |
464 B(Ldar), R(0), // | 488 B(Ldar), R(0), // |
465 B(JumpIfToBooleanFalseConstant), U8(0), // | 489 B(JumpIfToBooleanFalseConstant), U8(0), // |
466 #define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2), | 490 #define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2), |
467 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X | 491 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X |
468 #undef X | 492 #undef X |
469 B(LdaSmi8), U8(3), // | 493 B(LdaSmi8), U8(3), // |
470 B(Return)}, | 494 B(Return)}, |
471 1, | 495 1, |
472 {268, 0, 0, 0}}, | 496 {268, 0, 0, 0}}, |
| 497 {"var x = 1; var a = 2, b = 3; return (x > 3) || (" |
| 498 #define X "a = 1, b = 2, " |
| 499 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X |
| 500 #undef X |
| 501 "3);", |
| 502 3 * kPointerSize, |
| 503 1, |
| 504 285, |
| 505 {B(LdaSmi8), U8(1), // |
| 506 B(Star), R(0), // |
| 507 B(LdaSmi8), U8(2), // |
| 508 B(Star), R(1), // |
| 509 B(LdaSmi8), U8(3), // |
| 510 B(Star), R(2), // |
| 511 B(LdaSmi8), U8(3), // |
| 512 B(TestGreaterThan), R(0), // |
| 513 B(JumpIfTrueConstant), U8(0), // |
| 514 #define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2), |
| 515 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X |
| 516 #undef X |
| 517 B(LdaSmi8), U8(3), // |
| 518 B(Return)}, |
| 519 1, |
| 520 {268, 0, 0, 0}}, |
| 521 {"var x = 0; var a = 2, b = 3; return (x < 5) && (" |
| 522 #define X "a = 1, b = 2, " |
| 523 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X |
| 524 #undef X |
| 525 "3);", |
| 526 3 * kPointerSize, |
| 527 1, |
| 528 284, |
| 529 {B(LdaZero), // |
| 530 B(Star), R(0), // |
| 531 B(LdaSmi8), U8(2), // |
| 532 B(Star), R(1), // |
| 533 B(LdaSmi8), U8(3), // |
| 534 B(Star), R(2), // |
| 535 B(LdaSmi8), U8(5), // |
| 536 B(TestLessThan), R(0), // |
| 537 B(JumpIfFalseConstant), U8(0), // |
| 538 #define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2), |
| 539 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X |
| 540 #undef X |
| 541 B(LdaSmi8), U8(3), // |
| 542 B(Return)}, |
| 543 1, |
| 544 {268, 0, 0, 0}}, |
473 {"return 0 && 3;", | 545 {"return 0 && 3;", |
474 0 * kPointerSize, | 546 0 * kPointerSize, |
475 1, | 547 1, |
476 2, | 548 2, |
477 {B(LdaZero), // | 549 {B(LdaZero), // |
478 B(Return)}, | 550 B(Return)}, |
479 0}, | 551 0}, |
480 {"return 1 || 3;", | 552 {"return 1 || 3;", |
481 0 * kPointerSize, | 553 0 * kPointerSize, |
482 1, | 554 1, |
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1247 TEST(IfConditions) { | 1319 TEST(IfConditions) { |
1248 InitializedHandleScope handle_scope; | 1320 InitializedHandleScope handle_scope; |
1249 BytecodeGeneratorHelper helper; | 1321 BytecodeGeneratorHelper helper; |
1250 | 1322 |
1251 Handle<Object> unused = helper.factory()->undefined_value(); | 1323 Handle<Object> unused = helper.factory()->undefined_value(); |
1252 | 1324 |
1253 ExpectedSnippet<Handle<Object>> snippets[] = { | 1325 ExpectedSnippet<Handle<Object>> snippets[] = { |
1254 {"function f() { if (0) { return 1; } else { return -1; } } f()", | 1326 {"function f() { if (0) { return 1; } else { return -1; } } f()", |
1255 0, | 1327 0, |
1256 1, | 1328 1, |
1257 14, | 1329 13, |
1258 {B(LdaZero), // | 1330 {B(LdaZero), // |
1259 B(ToBoolean), // | 1331 B(JumpIfToBooleanFalse), U8(7), // |
1260 B(JumpIfFalse), U8(7), // | 1332 B(LdaSmi8), U8(1), // |
1261 B(LdaSmi8), U8(1), // | 1333 B(Return), // |
1262 B(Return), // | 1334 B(Jump), U8(5), // |
1263 B(Jump), U8(5), // | 1335 B(LdaSmi8), U8(-1), // |
1264 B(LdaSmi8), U8(-1), // | 1336 B(Return), // |
1265 B(Return), // | 1337 B(LdaUndefined), // |
1266 B(LdaUndefined), // | 1338 B(Return)}, // |
1267 B(Return)}, // | |
1268 0, | 1339 0, |
1269 {unused, unused, unused, unused, unused, unused}}, | 1340 {unused, unused, unused, unused, unused, unused}}, |
1270 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", | 1341 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", |
1271 0, | 1342 0, |
1272 1, | 1343 1, |
1273 15, | 1344 14, |
1274 {B(LdaConstant), U8(0), // | 1345 {B(LdaConstant), U8(0), // |
1275 B(ToBoolean), // | 1346 B(JumpIfToBooleanFalse), U8(7), // |
1276 B(JumpIfFalse), U8(7), // | 1347 B(LdaSmi8), U8(1), // |
1277 B(LdaSmi8), U8(1), // | 1348 B(Return), // |
1278 B(Return), // | 1349 B(Jump), U8(5), // |
1279 B(Jump), U8(5), // | 1350 B(LdaSmi8), U8(-1), // |
1280 B(LdaSmi8), U8(-1), // | 1351 B(Return), // |
1281 B(Return), // | 1352 B(LdaUndefined), // |
1282 B(LdaUndefined), // | 1353 B(Return)}, // |
1283 B(Return)}, // | |
1284 1, | 1354 1, |
1285 {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused, | 1355 {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused, |
1286 unused, unused, unused}}, | 1356 unused, unused, unused}}, |
1287 {"function f() { if (false) { return 1; } else { return -1; } } f();", | 1357 {"function f() { if (false) { return 1; } else { return -1; } } f();", |
1288 0, | 1358 0, |
1289 1, | 1359 1, |
1290 13, | 1360 13, |
1291 {B(LdaFalse), // | 1361 {B(LdaFalse), // |
1292 B(JumpIfFalse), U8(7), // | 1362 B(JumpIfFalse), U8(7), // |
1293 B(LdaSmi8), U8(1), // | 1363 B(LdaSmi8), U8(1), // |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 B(LdaConstant), U8(3), // | 1429 B(LdaConstant), U8(3), // |
1360 B(Return), // | 1430 B(Return), // |
1361 B(LdaUndefined), // | 1431 B(LdaUndefined), // |
1362 B(Return)}, // | 1432 B(Return)}, // |
1363 #undef X | 1433 #undef X |
1364 4, | 1434 4, |
1365 {helper.factory()->NewHeapNumber(0.01), | 1435 {helper.factory()->NewHeapNumber(0.01), |
1366 helper.factory()->NewNumberFromInt(200), | 1436 helper.factory()->NewNumberFromInt(200), |
1367 helper.factory()->NewNumberFromInt(199), | 1437 helper.factory()->NewNumberFromInt(199), |
1368 helper.factory()->NewNumberFromInt(-200), unused, unused}}, | 1438 helper.factory()->NewNumberFromInt(-200), unused, unused}}, |
| 1439 {"function f() { var a = 0; var b = 0; if (a) { " |
| 1440 #define X "b = a; a = b; " |
| 1441 X X X X X X X X X X X X X X X X X X X X X X X X |
| 1442 #undef X |
| 1443 " return 200; } else { return -200; } } f()", |
| 1444 2 * kPointerSize, |
| 1445 1, |
| 1446 212, |
| 1447 { |
| 1448 #define X B(Ldar), R(0), B(Star), R(1), B(Ldar), R(1), B(Star), R(0) |
| 1449 B(LdaZero), // |
| 1450 B(Star), R(0), // |
| 1451 B(LdaZero), // |
| 1452 B(Star), R(1), // |
| 1453 B(Ldar), R(0), // |
| 1454 B(JumpIfToBooleanFalseConstant), U8(1), // |
| 1455 X, X, X, X, X, X, X, X, X, X, // |
| 1456 X, X, X, X, X, X, X, X, X, X, // |
| 1457 X, X, X, X, // |
| 1458 B(LdaConstant), U8(0), // |
| 1459 B(Return), // |
| 1460 B(Jump), U8(5), // |
| 1461 B(LdaConstant), U8(2), // |
| 1462 B(Return), // |
| 1463 B(LdaUndefined), // |
| 1464 B(Return)}, // |
| 1465 #undef X |
| 1466 3, |
| 1467 {helper.factory()->NewNumberFromInt(200), |
| 1468 helper.factory()->NewNumberFromInt(199), |
| 1469 helper.factory()->NewNumberFromInt(-200), unused, unused, unused}}, |
| 1470 |
1369 {"function f(a, b) {\n" | 1471 {"function f(a, b) {\n" |
1370 " if (a == b) { return 1; }\n" | 1472 " if (a == b) { return 1; }\n" |
1371 " if (a === b) { return 1; }\n" | 1473 " if (a === b) { return 1; }\n" |
1372 " if (a < b) { return 1; }\n" | 1474 " if (a < b) { return 1; }\n" |
1373 " if (a > b) { return 1; }\n" | 1475 " if (a > b) { return 1; }\n" |
1374 " if (a <= b) { return 1; }\n" | 1476 " if (a <= b) { return 1; }\n" |
1375 " if (a >= b) { return 1; }\n" | 1477 " if (a >= b) { return 1; }\n" |
1376 " if (a in b) { return 1; }\n" | 1478 " if (a in b) { return 1; }\n" |
1377 " if (a instanceof b) { return 1; }\n" | 1479 " if (a instanceof b) { return 1; }\n" |
1378 " return 0;\n" | 1480 " return 0;\n" |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1728 B(LdaSmi8), U8(1), // | 1830 B(LdaSmi8), U8(1), // |
1729 B(Add), R(0), // | 1831 B(Add), R(0), // |
1730 B(Star), R(0), // | 1832 B(Star), R(0), // |
1731 B(Jump), U8(5), // | 1833 B(Jump), U8(5), // |
1732 B(LdaTrue), // | 1834 B(LdaTrue), // |
1733 B(JumpIfTrue), U8(-31), // | 1835 B(JumpIfTrue), U8(-31), // |
1734 B(Ldar), R(0), // | 1836 B(Ldar), R(0), // |
1735 B(Return), // | 1837 B(Return), // |
1736 }, | 1838 }, |
1737 0}, | 1839 0}, |
1738 }; | 1840 {"var x = 10;" |
| 1841 "var y = 1;" |
| 1842 "while (x) {" |
| 1843 " y = y * 12;" |
| 1844 " x = x - 1;" |
| 1845 "}" |
| 1846 "return y;", |
| 1847 2 * kPointerSize, |
| 1848 1, |
| 1849 29, |
| 1850 { |
| 1851 B(LdaSmi8), U8(10), // |
| 1852 B(Star), R(0), // |
| 1853 B(LdaSmi8), U8(1), // |
| 1854 B(Star), R(1), // |
| 1855 B(Jump), U8(14), // |
| 1856 B(LdaSmi8), U8(12), // |
| 1857 B(Mul), R(1), // |
| 1858 B(Star), R(1), // |
| 1859 B(LdaSmi8), U8(1), // |
| 1860 B(Sub), R(0), // |
| 1861 B(Star), R(0), // |
| 1862 B(Ldar), R(0), // |
| 1863 B(JumpIfToBooleanTrue), U8(-14), // |
| 1864 B(Ldar), R(1), // |
| 1865 B(Return), // |
| 1866 }, |
| 1867 0}, |
| 1868 {"var x = 10;" |
| 1869 "var y = 1;" |
| 1870 "do {" |
| 1871 " y = y * 12;" |
| 1872 " x = x - 1;" |
| 1873 "} while(x);" |
| 1874 "return y;", |
| 1875 2 * kPointerSize, |
| 1876 1, |
| 1877 27, |
| 1878 { |
| 1879 B(LdaSmi8), U8(10), // |
| 1880 B(Star), R(0), // |
| 1881 B(LdaSmi8), U8(1), // |
| 1882 B(Star), R(1), // |
| 1883 B(LdaSmi8), U8(12), // |
| 1884 B(Mul), R(1), // |
| 1885 B(Star), R(1), // |
| 1886 B(LdaSmi8), U8(1), // |
| 1887 B(Sub), R(0), // |
| 1888 B(Star), R(0), // |
| 1889 B(Ldar), R(0), // |
| 1890 B(JumpIfToBooleanTrue), U8(-14), // |
| 1891 B(Ldar), R(1), // |
| 1892 B(Return), // |
| 1893 }, |
| 1894 0}, |
| 1895 {"var y = 1;" |
| 1896 "for (var x = 10; x; --x) {" |
| 1897 " y = y * 12;" |
| 1898 "}" |
| 1899 "return y;", |
| 1900 2 * kPointerSize, |
| 1901 1, |
| 1902 29, |
| 1903 { |
| 1904 B(LdaSmi8), U8(1), // |
| 1905 B(Star), R(0), // |
| 1906 B(LdaSmi8), U8(10), // |
| 1907 B(Star), R(1), // |
| 1908 B(Jump), U8(14), // |
| 1909 B(LdaSmi8), U8(12), // |
| 1910 B(Mul), R(0), // |
| 1911 B(Star), R(0), // |
| 1912 B(Ldar), R(1), // |
| 1913 B(ToNumber), // |
| 1914 B(Dec), // |
| 1915 B(Star), R(1), // |
| 1916 B(Ldar), R(1), // |
| 1917 B(JumpIfToBooleanTrue), U8(-14), // |
| 1918 B(Ldar), R(0), // |
| 1919 B(Return), // |
| 1920 }, |
| 1921 0}}; |
1739 | 1922 |
1740 for (size_t i = 0; i < arraysize(snippets); i++) { | 1923 for (size_t i = 0; i < arraysize(snippets); i++) { |
1741 Handle<BytecodeArray> bytecode_array = | 1924 Handle<BytecodeArray> bytecode_array = |
1742 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 1925 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
1743 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 1926 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
1744 } | 1927 } |
1745 } | 1928 } |
1746 | 1929 |
1747 | 1930 |
1748 TEST(UnaryOperators) { | 1931 TEST(UnaryOperators) { |
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2829 3, | 3012 3, |
2830 { | 3013 { |
2831 B(LdaConstant), U8(0), // | 3014 B(LdaConstant), U8(0), // |
2832 B(Throw), // | 3015 B(Throw), // |
2833 }, | 3016 }, |
2834 1, | 3017 1, |
2835 {"Error"}}, | 3018 {"Error"}}, |
2836 {"if ('test') { throw 'Error'; };", | 3019 {"if ('test') { throw 'Error'; };", |
2837 0, | 3020 0, |
2838 1, | 3021 1, |
2839 10, | 3022 9, |
2840 { | 3023 { |
2841 B(LdaConstant), U8(0), // | 3024 B(LdaConstant), U8(0), // |
2842 B(ToBoolean), // | 3025 B(JumpIfToBooleanFalse), U8(5), // |
2843 B(JumpIfFalse), U8(5), // | 3026 B(LdaConstant), U8(1), // |
2844 B(LdaConstant), U8(1), // | 3027 B(Throw), // |
2845 B(Throw), // | 3028 B(LdaUndefined), // |
2846 B(LdaUndefined), // | 3029 B(Return), // |
2847 B(Return), // | |
2848 }, | 3030 }, |
2849 2, | 3031 2, |
2850 {"test", "Error"}}, | 3032 {"test", "Error"}}, |
2851 }; | 3033 }; |
2852 | 3034 |
2853 for (size_t i = 0; i < arraysize(snippets); i++) { | 3035 for (size_t i = 0; i < arraysize(snippets); i++) { |
2854 Handle<BytecodeArray> bytecode_array = | 3036 Handle<BytecodeArray> bytecode_array = |
2855 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3037 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
2856 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3038 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
2857 } | 3039 } |
(...skipping 960 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3818 | 4000 |
3819 | 4001 |
3820 TEST(Conditional) { | 4002 TEST(Conditional) { |
3821 InitializedHandleScope handle_scope; | 4003 InitializedHandleScope handle_scope; |
3822 BytecodeGeneratorHelper helper; | 4004 BytecodeGeneratorHelper helper; |
3823 | 4005 |
3824 ExpectedSnippet<int> snippets[] = { | 4006 ExpectedSnippet<int> snippets[] = { |
3825 {"return 1 ? 2 : 3;", | 4007 {"return 1 ? 2 : 3;", |
3826 0, | 4008 0, |
3827 1, | 4009 1, |
3828 12, | 4010 11, |
3829 { | 4011 { |
3830 B(LdaSmi8), U8(1), // | 4012 B(LdaSmi8), U8(1), // |
3831 B(ToBoolean), // | 4013 B(JumpIfToBooleanFalse), U8(6), // |
3832 B(JumpIfFalse), U8(6), // | 4014 B(LdaSmi8), U8(2), // |
3833 B(LdaSmi8), U8(2), // | 4015 B(Jump), U8(4), // |
3834 B(Jump), U8(4), // | 4016 B(LdaSmi8), U8(3), // |
3835 B(LdaSmi8), U8(3), // | 4017 B(Return), // |
3836 B(Return), // | |
3837 }}, | 4018 }}, |
3838 {"return 1 ? 2 ? 3 : 4 : 5;", | 4019 {"return 1 ? 2 ? 3 : 4 : 5;", |
3839 0, | 4020 0, |
3840 1, | 4021 1, |
3841 21, | 4022 19, |
3842 { | 4023 { |
3843 B(LdaSmi8), U8(1), // | 4024 B(LdaSmi8), U8(1), // |
3844 B(ToBoolean), // | 4025 B(JumpIfToBooleanFalse), U8(14), // |
3845 B(JumpIfFalse), U8(15), // | 4026 B(LdaSmi8), U8(2), // |
3846 B(LdaSmi8), U8(2), // | 4027 B(JumpIfToBooleanFalse), U8(6), // |
3847 B(ToBoolean), // | 4028 B(LdaSmi8), U8(3), // |
3848 B(JumpIfFalse), U8(6), // | 4029 B(Jump), U8(4), // |
3849 B(LdaSmi8), U8(3), // | 4030 B(LdaSmi8), U8(4), // |
3850 B(Jump), U8(4), // | 4031 B(Jump), U8(4), // |
3851 B(LdaSmi8), U8(4), // | 4032 B(LdaSmi8), U8(5), // |
3852 B(Jump), U8(4), // | 4033 B(Return), // |
3853 B(LdaSmi8), U8(5), // | |
3854 B(Return), // | |
3855 }}, | 4034 }}, |
3856 }; | 4035 }; |
3857 | 4036 |
3858 for (size_t i = 0; i < arraysize(snippets); i++) { | 4037 for (size_t i = 0; i < arraysize(snippets); i++) { |
3859 Handle<BytecodeArray> bytecode_array = | 4038 Handle<BytecodeArray> bytecode_array = |
3860 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 4039 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3861 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 4040 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
3862 } | 4041 } |
3863 } | 4042 } |
3864 | 4043 |
3865 } // namespace interpreter | 4044 } // namespace interpreter |
3866 } // namespace internal | 4045 } // namespace internal |
3867 } // namespace v8 | 4046 } // namespace v8 |
OLD | NEW |