Justin Ridgewell 628061c501 Add new.target transform (#5906)
* Add new.target transform

* Catch new.target under only an arrow function

* More unsupported reflect.construct cases

* Fix node 4 test

* Do not transform Methods

* More tests

* Properly setup function inheritance test

* Tests tests tests

* Fix ES6 class's new.target

* Remove expected output thats supposed to throw.
2017-07-07 14:28:19 -04:00

41 lines
766 B
JavaScript

const targets = [];
function Foo() {
targets.push(new.target);
}
function Bar() {
Foo.call(this);
}
Bar.prototype = Object.create(Foo.prototype, {
constructor: {
value: Bar,
writable: true,
configurable: true,
}
});
function Baz() {}
Reflect.construct(Foo, []);
Reflect.construct(Foo, [], Bar);
Reflect.construct(Bar, []);
Reflect.construct(Bar, [], Baz);
Reflect.construct(Foo, [], Baz);
assert.equal(targets[0], Foo);
assert.equal(targets[1], Bar);
assert.throws(() => {
// Wish we could support this...
// Then again, this is what a transformed class does.
assert.equal(targets[2], undefined);
});
assert.equal(targets[3], undefined);
assert.throws(() => {
// Wish we could support this...
assert.equal(targets[4], Baz);
});