Fix super nested class bugs (#7691)

* Properly traverse nested class for supers

* Add object nested in class cases

* Add object nested object cases

* Test class properties

* Undo changes to lerna.json

* Add tests arournd prefix/postfix super increment

* tmp

* Use sets
This commit is contained in:
Justin Ridgewell
2018-04-12 13:02:26 -04:00
committed by GitHub
parent af3d6526e7
commit ecbf0dd53c
37 changed files with 907 additions and 169 deletions

View File

@@ -0,0 +1,24 @@
"use strict";
class Hello {
constructor() {
return {
toString() {
return 'hello';
},
};
}
}
class Outer extends Hello {
constructor() {
class Inner {
[super()]() {
return 'hello';
}
}
return new Inner();
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,24 @@
"use strict";
class Hello {
constructor() {
return {
toString() {
return 'hello';
},
};
}
}
class Outer extends Hello {
constructor() {
class Inner {
[super()]() {
return 'hello';
}
}
return new Inner();
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,47 @@
"use strict";
var Hello = function Hello() {
babelHelpers.classCallCheck(this, Hello);
return {
toString() {
return 'hello';
}
};
};
var Outer =
/*#__PURE__*/
function (_Hello) {
babelHelpers.inherits(Outer, _Hello);
function Outer() {
var _this2 = this;
var _this;
babelHelpers.classCallCheck(this, Outer);
var Inner =
/*#__PURE__*/
function () {
function Inner() {
babelHelpers.classCallCheck(this, Inner);
}
babelHelpers.createClass(Inner, [{
key: _this = babelHelpers.possibleConstructorReturn(_this2, babelHelpers.getPrototypeOf(Outer).call(_this2)),
value: function value() {
return 'hello';
}
}]);
return Inner;
}();
return babelHelpers.possibleConstructorReturn(_this, new Inner());
}
return Outer;
}(Hello);
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,21 @@
"use strict";
class Hello {
toString() {
return 'hello';
}
}
class Outer extends Hello {
constructor() {
super();
class Inner {
[super.toString()]() {
return 'hello';
}
}
return new Inner();
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,21 @@
"use strict";
class Hello {
toString() {
return 'hello';
}
}
class Outer extends Hello {
constructor() {
super();
class Inner {
[super.toString()]() {
return 'hello';
}
}
return new Inner();
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,54 @@
"use strict";
var Hello =
/*#__PURE__*/
function () {
function Hello() {
babelHelpers.classCallCheck(this, Hello);
}
babelHelpers.createClass(Hello, [{
key: "toString",
value: function toString() {
return 'hello';
}
}]);
return Hello;
}();
var Outer =
/*#__PURE__*/
function (_Hello) {
babelHelpers.inherits(Outer, _Hello);
function Outer() {
var _this2 = this;
var _this;
babelHelpers.classCallCheck(this, Outer);
_this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this));
var Inner =
/*#__PURE__*/
function () {
function Inner() {
babelHelpers.classCallCheck(this, Inner);
}
babelHelpers.createClass(Inner, [{
key: babelHelpers.get(babelHelpers.getPrototypeOf(Outer.prototype), "toString", babelHelpers.assertThisInitialized(_this2)).call(_this2),
value: function value() {
return 'hello';
}
}]);
return Inner;
}();
return babelHelpers.possibleConstructorReturn(_this, new Inner());
}
return Outer;
}(Hello);
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,24 @@
"use strict";
class Hello {
constructor() {
return {
toString() {
return 'hello';
},
};
}
}
class Outer extends Hello {
constructor() {
const Inner = {
[super()]() {
return 'hello';
},
};
return Inner;
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,24 @@
"use strict";
class Hello {
constructor() {
return {
toString() {
return 'hello';
},
};
}
}
class Outer extends Hello {
constructor() {
const Inner = {
[super()]() {
return 'hello';
},
};
return Inner;
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,34 @@
"use strict";
var Hello = function Hello() {
babelHelpers.classCallCheck(this, Hello);
return {
toString() {
return 'hello';
}
};
};
var Outer =
/*#__PURE__*/
function (_Hello) {
babelHelpers.inherits(Outer, _Hello);
function Outer() {
var _this;
babelHelpers.classCallCheck(this, Outer);
var Inner = {
[_this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this))]() {
return 'hello';
}
};
return babelHelpers.possibleConstructorReturn(_this, Inner);
}
return Outer;
}(Hello);
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,21 @@
"use strict";
class Hello {
toString() {
return 'hello';
}
}
class Outer extends Hello {
constructor() {
super();
const Inner = {
[super.toString()]() {
return 'hello';
},
};
return Inner;
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,21 @@
"use strict";
class Hello {
toString() {
return 'hello';
}
}
class Outer extends Hello {
constructor() {
super();
const Inner = {
[super.toString()]() {
return 'hello';
},
};
return Inner;
}
}
assert.equal(new Outer().hello(), 'hello');

View File

@@ -0,0 +1,41 @@
"use strict";
var Hello =
/*#__PURE__*/
function () {
function Hello() {
babelHelpers.classCallCheck(this, Hello);
}
babelHelpers.createClass(Hello, [{
key: "toString",
value: function toString() {
return 'hello';
}
}]);
return Hello;
}();
var Outer =
/*#__PURE__*/
function (_Hello) {
babelHelpers.inherits(Outer, _Hello);
function Outer() {
var _this;
babelHelpers.classCallCheck(this, Outer);
_this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this));
var Inner = {
[babelHelpers.get(babelHelpers.getPrototypeOf(Outer.prototype), "toString", babelHelpers.assertThisInitialized(this)).call(this)]() {
return 'hello';
}
};
return babelHelpers.possibleConstructorReturn(_this, Inner);
}
return Outer;
}(Hello);
assert.equal(new Outer().hello(), 'hello');