test262/implementation-contributed/javascriptcore/stress/to-this-before-arrow-function-closes-over-this-that-starts-as-lexical-environment.js
test262-automation e9a5a7f918 [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) (#1620)
* [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)
2018-07-03 15:59:58 -04:00

59 lines
1.4 KiB
JavaScript

function assert(b) {
if (!b)
throw new Error("Bad assertion!")
}
function obj() {
return {};
}
noInline(obj);
// This test makes sure that when wrapper() is called with the closure created in foo() as |this|
// that we to_this the |this| that is a closure before the arrow function captures its value.
// This crashes if there is a bug in debug builds.
const globalThis = this;
function foo() {
function capture() { return wrapper; }
function wrapper() {
let x = () => {
// This should not defineProperty on a JSLexicalEnvironment! That's a huge bug.
Object.defineProperty(this, "foo", {
get: function() { },
set: function() { }
});
assert(!("bar" in this));
assert(this === globalThis);
}
x();
}
wrapper();
}
foo();
function foo2() {
function capture() { return wrapper; }
function wrapper() {
let x = () => {
// This should not defineProperty on a JSLexicalEnvironment! That's a huge bug.
Object.defineProperty(this, "foo", {
get: function() { },
set: function() { }
});
}
x();
function bar() {
with (obj()) {
assert;
}
}
bar();
}
wrapper();
}
foo2();