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) { ...@@ -36,6 +36,8 @@ utils.Import(function(from) {
//------------------------------------------------------------------- //-------------------------------------------------------------------
function StringConstructor(x) { function StringConstructor(x) {
// TODO(bmeurer): Move this to toplevel.
"use strict";
if (%_ArgumentsLength() == 0) x = ''; if (%_ArgumentsLength() == 0) x = '';
if (%_IsConstructCall()) { if (%_IsConstructCall()) {
%_SetValueOf(this, TO_STRING_INLINE(x)); %_SetValueOf(this, TO_STRING_INLINE(x));
......
...@@ -1341,6 +1341,8 @@ utils.InstallFunctions(GlobalObject, DONT_ENUM, [ ...@@ -1341,6 +1341,8 @@ utils.InstallFunctions(GlobalObject, DONT_ENUM, [
// Boolean // Boolean
function BooleanConstructor(x) { function BooleanConstructor(x) {
// TODO(bmeurer): Move this to toplevel.
"use strict";
if (%_IsConstructCall()) { if (%_IsConstructCall()) {
%_SetValueOf(this, ToBoolean(x)); %_SetValueOf(this, ToBoolean(x));
} else { } else {
...@@ -1390,6 +1392,8 @@ utils.InstallFunctions(GlobalBoolean.prototype, DONT_ENUM, [ ...@@ -1390,6 +1392,8 @@ utils.InstallFunctions(GlobalBoolean.prototype, DONT_ENUM, [
// Number // Number
function NumberConstructor(x) { function NumberConstructor(x) {
// TODO(bmeurer): Move this to toplevel.
"use strict";
var value = %_ArgumentsLength() == 0 ? 0 : ToNumber(x); var value = %_ArgumentsLength() == 0 ? 0 : ToNumber(x);
if (%_IsConstructCall()) { if (%_IsConstructCall()) {
%_SetValueOf(this, value); %_SetValueOf(this, value);
......
...@@ -26,12 +26,12 @@ ...@@ -26,12 +26,12 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var custom_valueOf = function() { var custom_valueOf = function() {
assertEquals(Number, custom_valueOf.caller); assertEquals(null, custom_valueOf.caller);
return 2; return 2;
} }
var custom_toString = function() { var custom_toString = function() {
assertEquals(String, custom_toString.caller); assertEquals(null, custom_toString.caller);
return "I used to be an adventurer like you"; 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