| 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 <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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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 | 
| OLD | NEW | 
|---|