blob: 1b64135cbfc0ec38e34b2999e14a6935004669e6 [file] [log] [blame]
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 ';
var text_value = 'function_global_scope';
var arguments = text_value;
var arr = a => arguments;
noInline(arr);
for (let i=0; i<10000; i++) {
let value = arr(i);
testCase(value, text_value, txtMsg + "#1");
}
function afFactory0() {
return a => arguments;
}
var af0 = afFactory0('ABC', 'DEF');
noInline(af0);
for (var i=0; i<10000; i++) {
var arr = af0(i);
testCase(arr.length, 2, txtMsg + "#2");
testCase(arr[0],'ABC', txtMsg + "#3");
testCase(arr[1],'DEF', txtMsg + "#4");
testCase(typeof arr[2], 'undefined', txtMsg + "#5");
}
var innerUseStrict = function () {
'use strict';
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 arr = af('D', 'E');
testCase(arr, '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');
}
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 + "#7");
}
test();