mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
If you don't specify a constructor, one will be provided for you by the state.
This commit is contained in:
parent
62b2ab29cd
commit
56eb474bf3
3 changed files with 25 additions and 5 deletions
11
lib/nodes.js
11
lib/nodes.js
|
@ -688,7 +688,7 @@
|
|||
__extends(ClassNode, BaseNode);
|
||||
ClassNode.prototype.type = 'Class';
|
||||
ClassNode.prototype.compile_node = function compile_node(o) {
|
||||
var _a, _b, _c, construct, extension, func, prop, props, ret, returns, val;
|
||||
var _a, _b, _c, applied, construct, extension, func, prop, props, ret, returns, val;
|
||||
extension = this.parent && new ExtendsNode(this.variable, this.parent);
|
||||
constructor = null;
|
||||
props = new Expressions();
|
||||
|
@ -709,8 +709,13 @@
|
|||
props.push(prop);
|
||||
}
|
||||
}
|
||||
if (!(constructor)) {
|
||||
constructor = new AssignNode(this.variable, new CodeNode());
|
||||
if (!constructor) {
|
||||
if (this.parent) {
|
||||
applied = new ValueNode(this.parent, [new AccessorNode(new LiteralNode('apply'))]);
|
||||
constructor = new AssignNode(this.variable, new CodeNode([], new Expressions([new CallNode(applied, [new LiteralNode('this'), new LiteralNode('arguments')])])));
|
||||
} else {
|
||||
constructor = new AssignNode(this.variable, new CodeNode());
|
||||
}
|
||||
}
|
||||
construct = this.idt() + constructor.compile(o) + ';\n';
|
||||
props = props.empty() ? '' : props.compile(o) + '\n';
|
||||
|
|
|
@ -523,7 +523,14 @@ exports.ClassNode: class ClassNode extends BaseNode
|
|||
prop: new AssignNode(val, prop.value)
|
||||
props.push prop
|
||||
|
||||
constructor: new AssignNode(@variable, new CodeNode()) unless constructor
|
||||
if not constructor
|
||||
if @parent
|
||||
applied: new ValueNode(@parent, [new AccessorNode(new LiteralNode('apply'))])
|
||||
constructor: new AssignNode(@variable, new CodeNode([], new Expressions([
|
||||
new CallNode(applied, [new LiteralNode('this'), new LiteralNode('arguments')])
|
||||
])))
|
||||
else
|
||||
constructor: new AssignNode(@variable, new CodeNode())
|
||||
|
||||
construct: @idt() + constructor.compile(o) + ';\n'
|
||||
props: if props.empty() then '' else props.compile(o) + '\n'
|
||||
|
|
|
@ -35,4 +35,12 @@ class SubClass extends SuperClass
|
|||
constructor: ->
|
||||
super 'sub'
|
||||
|
||||
ok (new SubClass()).prop is 'top-super-sub'
|
||||
ok (new SubClass()).prop is 'top-super-sub'
|
||||
|
||||
|
||||
class OneClass
|
||||
constructor: (name) -> @name: name
|
||||
|
||||
class TwoClass extends OneClass
|
||||
|
||||
ok (new TwoClass('three')).name is 'three'
|
Loading…
Add table
Reference in a new issue