mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
170 lines
3.6 KiB
JavaScript
170 lines
3.6 KiB
JavaScript
'use strict'
|
|
var testCase = function (actual, expected, message) {
|
|
if (actual !== expected) {
|
|
throw message + ". Expected '" + expected + "', but was '" + actual + "'";
|
|
}
|
|
};
|
|
|
|
var txtMsg = 'Error: arguments is not lexically binded inside of the arrow function in strict mode';
|
|
var text_value = 'function_global_scope';
|
|
|
|
function afFactory0() {
|
|
return a => arguments;
|
|
}
|
|
|
|
var af0 = afFactory0('ABC', 'DEF');
|
|
|
|
noInline(af0);
|
|
|
|
for (var i=0; i<10000; i++) {
|
|
let args = af0(i);
|
|
|
|
testCase(args.length, 2, txtMsg + "#2");
|
|
testCase(args[0], 'ABC', txtMsg + "#3");
|
|
testCase(args[1], 'DEF', txtMsg + "#4");
|
|
testCase(typeof args[2], 'undefined', txtMsg + "#5");
|
|
}
|
|
|
|
for (var i=0; i<10000; i++) {
|
|
let args = af0.call(this, i);
|
|
|
|
testCase(args.length, 2, txtMsg + "#2");
|
|
testCase(args[0], 'ABC', txtMsg + "#3");
|
|
testCase(args[1], 'DEF', txtMsg + "#4");
|
|
testCase(typeof args[2], 'undefined', txtMsg + "#5");
|
|
}
|
|
|
|
for (var i=0; i<10000; i++) {
|
|
var args = af0.apply(this, [i]);
|
|
|
|
testCase(args.length, 2, txtMsg + "#2");
|
|
testCase(args[0], 'ABC', txtMsg + "#3");
|
|
testCase(args[1], 'DEF', txtMsg + "#4");
|
|
testCase(typeof args[2], 'undefined', txtMsg + "#5");
|
|
}
|
|
|
|
var innerUseStrict = function () {
|
|
var createArrow = function (a, b, c) {
|
|
return (x, y) => arguments[0] + arguments[1] + arguments[2] + x + y;
|
|
};
|
|
|
|
let af = createArrow('A', 'B', 'C');
|
|
noInline(af);
|
|
|
|
for (var i=0; i<10000; i++) {
|
|
let args = af('D', 'E');
|
|
testCase(args, 'ABCDE', txtMsg + "#6");
|
|
}
|
|
};
|
|
|
|
innerUseStrict();
|
|
|
|
var obj = function (value) {
|
|
this.id = value;
|
|
};
|
|
|
|
var arr_nesting = () => () => () => new obj('data');
|
|
|
|
for (var i=0; i<10000; i++) {
|
|
testCase(arr_nesting()()().id, 'data');
|
|
}
|
|
|
|
function foo() {
|
|
var x = (p) => eval(p);
|
|
return x;
|
|
}
|
|
|
|
var foo_arr = foo('A', 'B');
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
testCase(foo_arr('arguments[0]'), 'A', txtMsg + "#15");
|
|
testCase(foo_arr('arguments[1]'), 'B', txtMsg + "#16");
|
|
}
|
|
|
|
function boo() {
|
|
return () => {
|
|
return () => {
|
|
return function () {
|
|
return () => arguments;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
testCase(boo('A' + i)('B' + i)('D' + i)('E' + i)('G' + i)[0], 'E' + i, txtMsg + "#17");
|
|
}
|
|
|
|
class A {
|
|
constructor() {
|
|
this.list = [];
|
|
}
|
|
};
|
|
|
|
class B extends A {
|
|
addObj(obj) {
|
|
this.list.push(obj);
|
|
this.result = 0;
|
|
}
|
|
runAll() {
|
|
for (let i = 0; i < this.list.length; i++) {
|
|
this.result += this.list[i].operand(1);
|
|
}
|
|
}
|
|
};
|
|
|
|
function test() {
|
|
let b = new B();
|
|
|
|
function runTest () {
|
|
b.addObj({ operand : (value) => value + value });
|
|
b.addObj({ operand : (value) => value + value });
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
runTest();
|
|
}
|
|
|
|
b.runAll();
|
|
|
|
testCase(b.result, 40000, txtMsg + "#18");
|
|
}
|
|
|
|
test();
|
|
|
|
var testValue = 'test-value';
|
|
|
|
function f_args () {
|
|
if (true) {
|
|
let someValue = '';
|
|
if (true) {
|
|
let anotherValue = 'value';
|
|
return () => () => () => arguments[0];
|
|
}
|
|
}
|
|
|
|
return () => 'no-value';
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
let v = f_args(testValue, 'anotherValue')()()();
|
|
testCase(v, testValue);
|
|
}
|
|
|
|
function f_args_eval () {
|
|
if (true) {
|
|
let someValue = '';
|
|
if (true) {
|
|
let anotherValue = 'value';
|
|
return () => () => () => eval('arguments[0]');
|
|
}
|
|
}
|
|
|
|
return () => 'no-value';
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
let v = f_args_eval(testValue, 'anotherValue')()()();
|
|
testCase(v, testValue);
|
|
}
|