[es6] Move builtin constructors for primitives to strict mode.
The ES6 specification says that "Built-in functions that are ECMAScript function objects must be strict mode functions", which in particular means that you can never test for them using the "caller" field of a sloppy mode function. CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_layout_dbg,v8_linux_nosnap_dbg R=mstarzinger@chromium.org BUG=v8:105 LOG=n Review URL: https://codereview.chromium.org/1347663002 Cr-Commit-Position: refs/heads/master@{#30750}
This commit is contained in:
parent
63190721cd
commit
e2f1c26982
@ -36,6 +36,8 @@ utils.Import(function(from) {
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
function StringConstructor(x) {
|
||||
// TODO(bmeurer): Move this to toplevel.
|
||||
"use strict";
|
||||
if (%_ArgumentsLength() == 0) x = '';
|
||||
if (%_IsConstructCall()) {
|
||||
%_SetValueOf(this, TO_STRING_INLINE(x));
|
||||
|
@ -1341,6 +1341,8 @@ utils.InstallFunctions(GlobalObject, DONT_ENUM, [
|
||||
// Boolean
|
||||
|
||||
function BooleanConstructor(x) {
|
||||
// TODO(bmeurer): Move this to toplevel.
|
||||
"use strict";
|
||||
if (%_IsConstructCall()) {
|
||||
%_SetValueOf(this, ToBoolean(x));
|
||||
} else {
|
||||
@ -1390,6 +1392,8 @@ utils.InstallFunctions(GlobalBoolean.prototype, DONT_ENUM, [
|
||||
// Number
|
||||
|
||||
function NumberConstructor(x) {
|
||||
// TODO(bmeurer): Move this to toplevel.
|
||||
"use strict";
|
||||
var value = %_ArgumentsLength() == 0 ? 0 : ToNumber(x);
|
||||
if (%_IsConstructCall()) {
|
||||
%_SetValueOf(this, value);
|
||||
|
@ -26,12 +26,12 @@
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
var custom_valueOf = function() {
|
||||
assertEquals(Number, custom_valueOf.caller);
|
||||
assertEquals(null, custom_valueOf.caller);
|
||||
return 2;
|
||||
}
|
||||
|
||||
var custom_toString = function() {
|
||||
assertEquals(String, custom_toString.caller);
|
||||
assertEquals(null, custom_toString.caller);
|
||||
return "I used to be an adventurer like you";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user