Commit e2f1c269 authored by bmeurer's avatar bmeurer Committed by Commit bot

[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}
parent 63190721
......@@ -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";
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment