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

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

Issue 1583783003: [Interpreter] Adds support for variable/function declarations in lookup slots. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
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 "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 3531 matching lines...) Expand 10 before | Expand all | Expand 10 after
3542 for (size_t i = 0; i < arraysize(eval_global); i++) { 3542 for (size_t i = 0; i < arraysize(eval_global); i++) {
3543 InterpreterTester tester(handles.main_isolate(), eval_global[i].first, 3543 InterpreterTester tester(handles.main_isolate(), eval_global[i].first,
3544 "test"); 3544 "test");
3545 auto callable = tester.GetCallable<>(); 3545 auto callable = tester.GetCallable<>();
3546 3546
3547 Handle<i::Object> return_value = callable().ToHandleChecked(); 3547 Handle<i::Object> return_value = callable().ToHandleChecked();
3548 CHECK(return_value->SameValue(*eval_global[i].second)); 3548 CHECK(return_value->SameValue(*eval_global[i].second));
3549 } 3549 }
3550 } 3550 }
3551 3551
3552
3553 TEST(InterpreterEvalVariableDecl) {
3554 HandleAndZoneScope handles;
3555 i::Isolate* isolate = handles.main_isolate();
3556 i::Factory* factory = isolate->factory();
3557
3558 std::pair<const char*, Handle<Object>> eval_global[] = {
3559 {"function f() { eval('var x = 10; x++;'); return x; }",
3560 handle(Smi::FromInt(11), isolate)},
3561 {"function f() { var x = 20; eval('var x = 10; x++;'); return x; }",
3562 handle(Smi::FromInt(11), isolate)},
3563 {"function f() {"
3564 " var x = 20;"
3565 " eval('\"use strict\"; var x = 10; x++;');"
3566 " return x; }",
3567 handle(Smi::FromInt(20), isolate)},
3568 {"function f() {"
3569 " var y = 30;"
3570 " eval('var x = {1:20}; x[2]=y;');"
3571 " return x[2]; }",
3572 handle(Smi::FromInt(30), isolate)},
3573 {"function f() {"
3574 " eval('var x = {name:\"test\"};');"
3575 " return x.name; }",
3576 factory->NewStringFromStaticChars("test")},
3577 {"function f() {"
3578 " eval('var x = [{name:\"test\"}, {type:\"cc\"}];');"
3579 " return x[1].type+x[0].name; }",
3580 factory->NewStringFromStaticChars("cctest")},
3581 // TODO(mythria): Add tests with const declarations.
3582 };
3583
3584 for (size_t i = 0; i < arraysize(eval_global); i++) {
3585 InterpreterTester tester(handles.main_isolate(), eval_global[i].first, "*");
3586 auto callable = tester.GetCallable<>();
3587
3588 Handle<i::Object> return_value = callable().ToHandleChecked();
3589 CHECK(return_value->SameValue(*eval_global[i].second));
3590 }
3591 }
3592
3593
3594 TEST(InterpreterEvalFunctionDecl) {
3595 HandleAndZoneScope handles;
3596 i::Isolate* isolate = handles.main_isolate();
3597
3598 std::pair<const char*, Handle<Object>> eval_global[] = {
3599 {"function f() {\n"
3600 " var get_eval_x;\n"
3601 " var x = 3;\n"
3602 " eval('\"use strict\"; "
3603 " var x = 20; "
3604 " function func() {return x;}; "
3605 " get_eval_x = func;');\n"
3606 " return get_eval_x() + x;\n"
3607 "}",
3608 handle(Smi::FromInt(23), isolate)},
3609 {"function f() {\n"
3610 " var get_x;\n"
3611 " var x = 3;\n"
3612 " eval('var x = 20;"
3613 " function func() {return x;};"
3614 " get_x = func;');\n"
3615 " return get_x() + x;\n"
rmcilroy 2016/01/14 11:21:12 These are testing variable declarations (since you
mythria 2016/01/15 11:27:04 In strict mode, we cannot function declarations ev
3616 "}",
3617 handle(Smi::FromInt(40), isolate)},
3618 };
3619
3620 for (size_t i = 0; i < arraysize(eval_global); i++) {
3621 InterpreterTester tester(handles.main_isolate(), eval_global[i].first, "*");
3622 auto callable = tester.GetCallable<>();
3623
3624 Handle<i::Object> return_value = callable().ToHandleChecked();
3625 CHECK(return_value->SameValue(*eval_global[i].second));
3626 }
3627 }
3628
3552 } // namespace interpreter 3629 } // namespace interpreter
3553 } // namespace internal 3630 } // namespace internal
3554 } // namespace v8 3631 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698