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

Side by Side Diff: src/js/v8natives.js

Issue 1419813010: [runtime] Remove the very dangerous %_CallFunction intrinsic. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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
« no previous file with comments | « src/js/templates.js ('k') | src/runtime/runtime.h » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 (function(global, utils) { 5 (function(global, utils) {
6 6
7 %CheckIsBootstrapping(); 7 %CheckIsBootstrapping();
8 8
9 // ---------------------------------------------------------------------------- 9 // ----------------------------------------------------------------------------
10 // Imports 10 // Imports
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 110
111 111
112 function GlobalEval(x) { 112 function GlobalEval(x) {
113 if (!IS_STRING(x)) return x; 113 if (!IS_STRING(x)) return x;
114 114
115 var global_proxy = %GlobalProxy(GlobalEval); 115 var global_proxy = %GlobalProxy(GlobalEval);
116 116
117 var f = %CompileString(x, false); 117 var f = %CompileString(x, false);
118 if (!IS_FUNCTION(f)) return f; 118 if (!IS_FUNCTION(f)) return f;
119 119
120 return %_CallFunction(global_proxy, f); 120 return %_Call(f, global_proxy);
121 } 121 }
122 122
123 123
124 // ---------------------------------------------------------------------------- 124 // ----------------------------------------------------------------------------
125 125
126 // Set up global object. 126 // Set up global object.
127 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; 127 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY;
128 128
129 utils.InstallConstants(global, [ 129 utils.InstallConstants(global, [
130 // ECMA 262 - 15.1.1.1. 130 // ECMA 262 - 15.1.1.1.
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 } 547 }
548 trap = defaultTrap; 548 trap = defaultTrap;
549 } else if (!IS_CALLABLE(trap)) { 549 } else if (!IS_CALLABLE(trap)) {
550 throw MakeTypeError(kProxyHandlerTrapMustBeCallable, handler, name); 550 throw MakeTypeError(kProxyHandlerTrapMustBeCallable, handler, name);
551 } 551 }
552 return trap; 552 return trap;
553 } 553 }
554 554
555 555
556 function CallTrap0(handler, name, defaultTrap) { 556 function CallTrap0(handler, name, defaultTrap) {
557 return %_CallFunction(handler, GetTrap(handler, name, defaultTrap)); 557 return %_Call(GetTrap(handler, name, defaultTrap), handler);
558 } 558 }
559 559
560 560
561 function CallTrap1(handler, name, defaultTrap, x) { 561 function CallTrap1(handler, name, defaultTrap, x) {
562 return %_CallFunction(handler, x, GetTrap(handler, name, defaultTrap)); 562 return %_Call(GetTrap(handler, name, defaultTrap), handler, x);
563 } 563 }
564 564
565 565
566 function CallTrap2(handler, name, defaultTrap, x, y) { 566 function CallTrap2(handler, name, defaultTrap, x, y) {
567 return %_CallFunction(handler, x, y, GetTrap(handler, name, defaultTrap)); 567 return %_Call(GetTrap(handler, name, defaultTrap), handler, x, y);
568 } 568 }
569 569
570 570
571 // ES5 section 8.12.1. 571 // ES5 section 8.12.1.
572 function GetOwnPropertyJS(obj, v) { 572 function GetOwnPropertyJS(obj, v) {
573 var p = TO_NAME(v); 573 var p = TO_NAME(v);
574 if (%_IsJSProxy(obj)) { 574 if (%_IsJSProxy(obj)) {
575 // TODO(rossberg): adjust once there is a story for symbols vs proxies. 575 // TODO(rossberg): adjust once there is a story for symbols vs proxies.
576 if (IS_SYMBOL(v)) return UNDEFINED; 576 if (IS_SYMBOL(v)) return UNDEFINED;
577 577
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 // Convert the radix to an integer and check the range. 1456 // Convert the radix to an integer and check the range.
1457 radix = TO_INTEGER(radix); 1457 radix = TO_INTEGER(radix);
1458 if (radix < 2 || radix > 36) throw MakeRangeError(kToRadixFormatRange); 1458 if (radix < 2 || radix > 36) throw MakeRangeError(kToRadixFormatRange);
1459 // Convert the number to a string in the given radix. 1459 // Convert the number to a string in the given radix.
1460 return %NumberToRadixString(number, radix); 1460 return %NumberToRadixString(number, radix);
1461 } 1461 }
1462 1462
1463 1463
1464 // ECMA-262 section 15.7.4.3 1464 // ECMA-262 section 15.7.4.3
1465 function NumberToLocaleString() { 1465 function NumberToLocaleString() {
1466 return %_CallFunction(this, NumberToStringJS); 1466 return %_Call(NumberToStringJS, this);
1467 } 1467 }
1468 1468
1469 1469
1470 // ECMA-262 section 15.7.4.4 1470 // ECMA-262 section 15.7.4.4
1471 function NumberValueOf() { 1471 function NumberValueOf() {
1472 // NOTE: Both Number objects and values can enter here as 1472 // NOTE: Both Number objects and values can enter here as
1473 // 'this'. This is not as dictated by ECMA-262. 1473 // 'this'. This is not as dictated by ECMA-262.
1474 if (!IS_NUMBER(this) && !IS_NUMBER_WRAPPER(this)) { 1474 if (!IS_NUMBER(this) && !IS_NUMBER_WRAPPER(this)) {
1475 throw MakeTypeError(kNotGeneric, 'Number.prototype.valueOf'); 1475 throw MakeTypeError(kNotGeneric, 'Number.prototype.valueOf');
1476 } 1476 }
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 var n = args.length; 1760 var n = args.length;
1761 var p = ''; 1761 var p = '';
1762 if (n > 1) { 1762 if (n > 1) {
1763 p = TO_STRING(args[0]); 1763 p = TO_STRING(args[0]);
1764 for (var i = 1; i < n - 1; i++) { 1764 for (var i = 1; i < n - 1; i++) {
1765 p += ',' + TO_STRING(args[i]); 1765 p += ',' + TO_STRING(args[i]);
1766 } 1766 }
1767 // If the formal parameters string include ) - an illegal 1767 // If the formal parameters string include ) - an illegal
1768 // character - it may make the combined function expression 1768 // character - it may make the combined function expression
1769 // compile. We avoid this problem by checking for this early on. 1769 // compile. We avoid this problem by checking for this early on.
1770 if (%_CallFunction(p, ')', StringIndexOf) != -1) { 1770 if (%_Call(StringIndexOf, p, ')') != -1) {
1771 throw MakeSyntaxError(kParenthesisInArgString); 1771 throw MakeSyntaxError(kParenthesisInArgString);
1772 } 1772 }
1773 // If the formal parameters include an unbalanced block comment, the 1773 // If the formal parameters include an unbalanced block comment, the
1774 // function must be rejected. Since JavaScript does not allow nested 1774 // function must be rejected. Since JavaScript does not allow nested
1775 // comments we can include a trailing block comment to catch this. 1775 // comments we can include a trailing block comment to catch this.
1776 p += '\n/' + '**/'; 1776 p += '\n/' + '**/';
1777 } 1777 }
1778 var body = (n > 0) ? TO_STRING(args[n - 1]) : ''; 1778 var body = (n > 0) ? TO_STRING(args[n - 1]) : '';
1779 return '(' + function_token + '(' + p + ') {\n' + body + '\n})'; 1779 return '(' + function_token + '(' + p + ') {\n' + body + '\n})';
1780 } 1780 }
1781 1781
1782 1782
1783 function FunctionConstructor(arg1) { // length == 1 1783 function FunctionConstructor(arg1) { // length == 1
1784 var source = NewFunctionString(arguments, 'function'); 1784 var source = NewFunctionString(arguments, 'function');
1785 var global_proxy = %GlobalProxy(FunctionConstructor); 1785 var global_proxy = %GlobalProxy(FunctionConstructor);
1786 // Compile the string in the constructor and not a helper so that errors 1786 // Compile the string in the constructor and not a helper so that errors
1787 // appear to come from here. 1787 // appear to come from here.
1788 var func = %_CallFunction(global_proxy, %CompileString(source, true)); 1788 var func = %_Call(%CompileString(source, true), global_proxy);
1789 // Set name-should-print-as-anonymous flag on the ShareFunctionInfo and 1789 // Set name-should-print-as-anonymous flag on the ShareFunctionInfo and
1790 // ensure that |func| uses correct initial map from |new.target| if 1790 // ensure that |func| uses correct initial map from |new.target| if
1791 // it's available. 1791 // it's available.
1792 return %CompleteFunctionConstruction(func, GlobalFunction, new.target); 1792 return %CompleteFunctionConstruction(func, GlobalFunction, new.target);
1793 } 1793 }
1794 1794
1795 1795
1796 // ---------------------------------------------------------------------------- 1796 // ----------------------------------------------------------------------------
1797 1797
1798 %SetCode(GlobalFunction, FunctionConstructor); 1798 %SetCode(GlobalFunction, FunctionConstructor);
(...skipping 10 matching lines...) Expand all
1809 1809
1810 // ES6 rev 33, 2015-02-12 1810 // ES6 rev 33, 2015-02-12
1811 // 7.4.1 GetIterator ( obj, method ) 1811 // 7.4.1 GetIterator ( obj, method )
1812 function GetIterator(obj, method) { 1812 function GetIterator(obj, method) {
1813 if (IS_UNDEFINED(method)) { 1813 if (IS_UNDEFINED(method)) {
1814 method = obj[iteratorSymbol]; 1814 method = obj[iteratorSymbol];
1815 } 1815 }
1816 if (!IS_CALLABLE(method)) { 1816 if (!IS_CALLABLE(method)) {
1817 throw MakeTypeError(kNotIterable, obj); 1817 throw MakeTypeError(kNotIterable, obj);
1818 } 1818 }
1819 var iterator = %_CallFunction(obj, method); 1819 var iterator = %_Call(method, obj);
1820 if (!IS_SPEC_OBJECT(iterator)) { 1820 if (!IS_SPEC_OBJECT(iterator)) {
1821 throw MakeTypeError(kNotAnIterator, iterator); 1821 throw MakeTypeError(kNotAnIterator, iterator);
1822 } 1822 }
1823 return iterator; 1823 return iterator;
1824 } 1824 }
1825 1825
1826 // ---------------------------------------------------------------------------- 1826 // ----------------------------------------------------------------------------
1827 // Exports 1827 // Exports
1828 1828
1829 utils.Export(function(to) { 1829 utils.Export(function(to) {
(...skipping 18 matching lines...) Expand all
1848 1848
1849 %InstallToContext([ 1849 %InstallToContext([
1850 "global_eval_fun", GlobalEval, 1850 "global_eval_fun", GlobalEval,
1851 "object_value_of", ObjectValueOf, 1851 "object_value_of", ObjectValueOf,
1852 "object_to_string", ObjectToString, 1852 "object_to_string", ObjectToString,
1853 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor, 1853 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor,
1854 "to_complete_property_descriptor", ToCompletePropertyDescriptor, 1854 "to_complete_property_descriptor", ToCompletePropertyDescriptor,
1855 ]); 1855 ]);
1856 1856
1857 }) 1857 })
OLDNEW
« no previous file with comments | « src/js/templates.js ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698