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

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

Issue 1664593003: [Interpreter] Adds support for rest parameters to interpreter. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixes comments. Created 4 years, 10 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
« no previous file with comments | « test/cctest/cctest.status ('k') | test/cctest/interpreter/test-bytecode-generator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1661 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 Zone* zone = scope.main_zone(); 1672 Zone* zone = scope.main_zone();
1673 Factory* factory = isolate->factory(); 1673 Factory* factory = isolate->factory();
1674 1674
1675 ExpectedSnippet<0> snippets[] = { 1675 ExpectedSnippet<0> snippets[] = {
1676 {"function f() {return arguments[0];}", {factory->undefined_value()}}, 1676 {"function f() {return arguments[0];}", {factory->undefined_value()}},
1677 {"function f(a) {return arguments[0];}", {factory->undefined_value()}}, 1677 {"function f(a) {return arguments[0];}", {factory->undefined_value()}},
1678 {"function f() {'use strict'; return arguments[0];}", 1678 {"function f() {'use strict'; return arguments[0];}",
1679 {factory->undefined_value()}}, 1679 {factory->undefined_value()}},
1680 {"function f(a) {'use strict'; return arguments[0];}", 1680 {"function f(a) {'use strict'; return arguments[0];}",
1681 {factory->undefined_value()}}, 1681 {factory->undefined_value()}},
1682 {"function f(...restArgs) {return restArgs[0];}",
1683 {factory->undefined_value()}},
1684 {"function f(a, ...restArgs) {return restArgs[0];}",
1685 {factory->undefined_value()}},
1682 }; 1686 };
1683 1687
1684 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]); 1688 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1685 for (size_t i = 0; i < num_snippets; i++) { 1689 for (size_t i = 0; i < num_snippets; i++) {
1686 ScopedVector<char> script(1024); 1690 ScopedVector<char> script(1024);
1687 SNPrintF(script, "%s\n%s();", snippets[i].code_snippet, kFunctionName); 1691 SNPrintF(script, "%s\n%s();", snippets[i].code_snippet, kFunctionName);
1688 1692
1689 BytecodeGraphTester tester(isolate, zone, script.start()); 1693 BytecodeGraphTester tester(isolate, zone, script.start());
1690 auto callable = tester.GetCallable<>(); 1694 auto callable = tester.GetCallable<>();
1691 Handle<Object> return_value = callable().ToHandleChecked(); 1695 Handle<Object> return_value = callable().ToHandleChecked();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1734 auto callable = 1738 auto callable =
1735 tester.GetCallable<Handle<Object>, Handle<Object>, Handle<Object>>(); 1739 tester.GetCallable<Handle<Object>, Handle<Object>, Handle<Object>>();
1736 Handle<Object> return_value = 1740 Handle<Object> return_value =
1737 callable(snippets[i].parameter(0), snippets[i].parameter(1), 1741 callable(snippets[i].parameter(0), snippets[i].parameter(1),
1738 snippets[i].parameter(2)) 1742 snippets[i].parameter(2))
1739 .ToHandleChecked(); 1743 .ToHandleChecked();
1740 CHECK(return_value->SameValue(*snippets[i].return_value())); 1744 CHECK(return_value->SameValue(*snippets[i].return_value()));
1741 } 1745 }
1742 } 1746 }
1743 1747
1748 TEST(BytecodeGraphBuilderCreateRestArguments) {
1749 HandleAndZoneScope scope;
1750 Isolate* isolate = scope.main_isolate();
1751 Zone* zone = scope.main_zone();
1752 Factory* factory = isolate->factory();
1753
1754 ExpectedSnippet<3> snippets[] = {
1755 {"function f(...restArgs) {return restArgs[0];}",
1756 {factory->NewNumberFromInt(1), factory->NewNumberFromInt(1),
1757 factory->NewNumberFromInt(2), factory->NewNumberFromInt(3)}},
1758 {"function f(a, b, ...restArgs) {return restArgs[0];}",
1759 {factory->NewNumberFromInt(3), factory->NewNumberFromInt(1),
1760 factory->NewNumberFromInt(2), factory->NewNumberFromInt(3)}},
1761 {"function f(a, b, ...restArgs) {return arguments[2];}",
1762 {factory->NewNumberFromInt(3), factory->NewNumberFromInt(1),
1763 factory->NewNumberFromInt(2), factory->NewNumberFromInt(3)}},
1764 {"function f(a, ...restArgs) { return restArgs[2];}",
1765 {factory->undefined_value(), factory->NewNumberFromInt(1),
1766 factory->NewNumberFromInt(2), factory->NewNumberFromInt(3)}},
1767 {"function f(a, ...restArgs) { return arguments[0] + restArgs[1];}",
1768 {factory->NewNumberFromInt(4), factory->NewNumberFromInt(1),
1769 factory->NewNumberFromInt(2), factory->NewNumberFromInt(3)}},
1770 {"function inline_func(a, ...restArgs) { return restArgs[0] }"
1771 "function f(a, b, c) {return inline_func(b, c) + arguments[0];}",
1772 {factory->NewNumberFromInt(31), factory->NewNumberFromInt(1),
1773 factory->NewNumberFromInt(2), factory->NewNumberFromInt(30)}},
1774 };
1775
1776 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1777 for (size_t i = 0; i < num_snippets; i++) {
1778 ScopedVector<char> script(1024);
1779 SNPrintF(script, "%s\n%s();", snippets[i].code_snippet, kFunctionName);
1780
1781 BytecodeGraphTester tester(isolate, zone, script.start());
1782 auto callable =
1783 tester.GetCallable<Handle<Object>, Handle<Object>, Handle<Object>>();
1784 Handle<Object> return_value =
1785 callable(snippets[i].parameter(0), snippets[i].parameter(1),
1786 snippets[i].parameter(2))
1787 .ToHandleChecked();
1788 CHECK(return_value->SameValue(*snippets[i].return_value()));
1789 }
1790 }
1744 1791
1745 TEST(BytecodeGraphBuilderRegExpLiterals) { 1792 TEST(BytecodeGraphBuilderRegExpLiterals) {
1746 HandleAndZoneScope scope; 1793 HandleAndZoneScope scope;
1747 Isolate* isolate = scope.main_isolate(); 1794 Isolate* isolate = scope.main_isolate();
1748 Zone* zone = scope.main_zone(); 1795 Zone* zone = scope.main_zone();
1749 Factory* factory = isolate->factory(); 1796 Factory* factory = isolate->factory();
1750 1797
1751 ExpectedSnippet<0> snippets[] = { 1798 ExpectedSnippet<0> snippets[] = {
1752 {"return /abd/.exec('cccabbdd');", {factory->null_value()}}, 1799 {"return /abd/.exec('cccabbdd');", {factory->null_value()}},
1753 {"return /ab+d/.exec('cccabbdd')[0];", 1800 {"return /ab+d/.exec('cccabbdd')[0];",
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after
2627 Handle<Object> return_value = callable().ToHandleChecked(); 2674 Handle<Object> return_value = callable().ToHandleChecked();
2628 CHECK(return_value->SameValue(*snippets[i].return_value())); 2675 CHECK(return_value->SameValue(*snippets[i].return_value()));
2629 } 2676 }
2630 2677
2631 FLAG_harmony_do_expressions = old_flag; 2678 FLAG_harmony_do_expressions = old_flag;
2632 } 2679 }
2633 2680
2634 } // namespace compiler 2681 } // namespace compiler
2635 } // namespace internal 2682 } // namespace internal
2636 } // namespace v8 2683 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/cctest.status ('k') | test/cctest/interpreter/test-bytecode-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698