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

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

Issue 1414193006: [Interpreter] Removes unnecessary jumps and dead code from If and loops. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed review comments Created 5 years, 1 month 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/execution.h" 7 #include "src/execution.h"
8 #include "src/handles.h" 8 #include "src/handles.h"
9 #include "src/interpreter/bytecode-array-builder.h" 9 #include "src/interpreter/bytecode-array-builder.h"
10 #include "src/interpreter/interpreter.h" 10 #include "src/interpreter/interpreter.h"
(...skipping 2383 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 2394
2395 2395
2396 TEST(InterpreterDeleteSloppyUnqualifiedIdentifier) { 2396 TEST(InterpreterDeleteSloppyUnqualifiedIdentifier) {
2397 HandleAndZoneScope handles; 2397 HandleAndZoneScope handles;
2398 i::Isolate* isolate = handles.main_isolate(); 2398 i::Isolate* isolate = handles.main_isolate();
2399 i::Factory* factory = isolate->factory(); 2399 i::Factory* factory = isolate->factory();
2400 2400
2401 // These tests generate a syntax error for strict mode. We don't 2401 // These tests generate a syntax error for strict mode. We don't
2402 // test for it here. 2402 // test for it here.
2403 std::pair<const char*, Handle<Object>> test_delete[] = { 2403 std::pair<const char*, Handle<Object>> test_delete[] = {
2404 std::make_pair("var a = { x:10, y:'abc'};\n" 2404 std::make_pair("var sloppy_a = { x:10, y:'abc'};\n"
2405 "var b = delete a;\n" 2405 "var sloppy_b = delete sloppy_a;\n"
2406 "if (delete a) {\n" 2406 "if (delete sloppy_a) {\n"
2407 " return undefined;\n" 2407 " return undefined;\n"
2408 "} else {\n" 2408 "} else {\n"
2409 " return a.x;\n" 2409 " return sloppy_a.x;\n"
2410 "}\n", 2410 "}\n",
2411 Handle<Object>(Smi::FromInt(10), isolate)), 2411 Handle<Object>(Smi::FromInt(10), isolate)),
2412 // TODO(mythria) When try-catch is implemented change the tests to check 2412 // TODO(mythria) When try-catch is implemented change the tests to check
2413 // if delete actually deletes 2413 // if delete actually deletes
2414 std::make_pair("a = { x:10, y:'abc'};\n" 2414 std::make_pair("sloppy_a = { x:10, y:'abc'};\n"
2415 "var b = delete a;\n" 2415 "var sloppy_b = delete sloppy_a;\n"
2416 // "try{return a.x;} catch(e) {return b;}\n" 2416 // "try{return a.x;} catch(e) {return b;}\n"
2417 "return b;", 2417 "return sloppy_b;",
2418 factory->ToBoolean(true)), 2418 factory->ToBoolean(true)),
2419 std::make_pair("a = { x:10, y:'abc'};\n" 2419 std::make_pair("sloppy_a = { x:10, y:'abc'};\n"
2420 "var b = delete c;\n" 2420 "var sloppy_b = delete sloppy_c;\n"
2421 "return b;", 2421 "return sloppy_b;",
2422 factory->ToBoolean(true))}; 2422 factory->ToBoolean(true))};
2423 2423
2424 2424
2425 for (size_t i = 0; i < arraysize(test_delete); i++) { 2425 for (size_t i = 0; i < arraysize(test_delete); i++) {
2426 std::string source(InterpreterTester::SourceForBody(test_delete[i].first)); 2426 std::string source(InterpreterTester::SourceForBody(test_delete[i].first));
2427 InterpreterTester tester(handles.main_isolate(), source.c_str()); 2427 InterpreterTester tester(handles.main_isolate(), source.c_str());
2428 auto callable = tester.GetCallable<>(); 2428 auto callable = tester.GetCallable<>();
2429 2429
2430 Handle<i::Object> return_value = callable().ToHandleChecked(); 2430 Handle<i::Object> return_value = callable().ToHandleChecked();
2431 CHECK(return_value->SameValue(*test_delete[i].second)); 2431 CHECK(return_value->SameValue(*test_delete[i].second));
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2491 2491
2492 for (size_t i = 0; i < arraysize(test_global_delete); i++) { 2492 for (size_t i = 0; i < arraysize(test_global_delete); i++) {
2493 InterpreterTester tester(handles.main_isolate(), 2493 InterpreterTester tester(handles.main_isolate(),
2494 test_global_delete[i].first); 2494 test_global_delete[i].first);
2495 auto callable = tester.GetCallable<>(); 2495 auto callable = tester.GetCallable<>();
2496 2496
2497 Handle<i::Object> return_value = callable().ToHandleChecked(); 2497 Handle<i::Object> return_value = callable().ToHandleChecked();
2498 CHECK(return_value->SameValue(*test_global_delete[i].second)); 2498 CHECK(return_value->SameValue(*test_global_delete[i].second));
2499 } 2499 }
2500 } 2500 }
2501
2502
2503 TEST(InterpreterLoops) {
2504 HandleAndZoneScope handles;
2505 i::Isolate* isolate = handles.main_isolate();
2506 i::Factory* factory = isolate->factory();
2507
2508 std::pair<const char*, Handle<Object>> test_loop[] = {
2509 std::make_pair("var a = 10; var b = 1;\n"
2510 "while (false) {\n"
2511 " b = b * 2;\n"
2512 " a = a - 1;\n"
2513 "}\n"
2514 "return b;\n",
2515 Handle<Object>(Smi::FromInt(1), isolate)),
2516 std::make_pair("var a = 10; var b = 1;\n"
2517 "while (true) {\n"
2518 " b = b * 2;\n"
2519 " a = a - 1;\n"
2520 " if (a == 0) break;"
2521 " continue;"
2522 "}\n"
2523 "return b;\n",
2524 factory->NewHeapNumber(1024)),
2525 std::make_pair("var a = 10; var b = 1;\n"
2526 "do {\n"
2527 " b = b * 2;\n"
2528 " a = a - 1;\n"
2529 " if (a == 0) break;"
2530 "} while(true);\n"
2531 "return b;\n",
2532 factory->NewHeapNumber(1024)),
2533 std::make_pair("var a = 10; var b = 1;\n"
2534 "do {\n"
2535 " b = b * 2;\n"
2536 " a = a - 1;\n"
2537 " if (a == 0) break;"
2538 "} while(false);\n"
2539 "return b;\n",
2540 Handle<Object>(Smi::FromInt(2), isolate)),
2541 std::make_pair("var a = 10; var b = 1;\n"
2542 "for ( a = 1, b = 30; false; ) {\n"
2543 " b = b * 2;\n"
2544 "}\n"
2545 "return b;\n",
2546 Handle<Object>(Smi::FromInt(30), isolate))};
2547
2548 for (size_t i = 0; i < arraysize(test_loop); i++) {
2549 std::string source(InterpreterTester::SourceForBody(test_loop[i].first));
2550 InterpreterTester tester(handles.main_isolate(), source.c_str());
2551 auto callable = tester.GetCallable<>();
2552
2553 Handle<i::Object> return_value = callable().ToHandleChecked();
2554 CHECK(return_value->SameValue(*test_loop[i].second));
2555 }
2556 }
OLDNEW
« src/interpreter/bytecode-generator.cc ('K') | « test/cctest/interpreter/test-bytecode-generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698