From ccfd369a77ff04ed09efd3fd1114ee5f52eb744b Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Thu, 23 Dec 2010 10:22:52 -0800 Subject: [PATCH] Fixing class extends this in a non-class context. --- lib/nodes.js | 2 +- src/nodes.coffee | 2 +- test/test_classes.coffee | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/nodes.js b/lib/nodes.js index d6ed86fa..94b05f15 100644 --- a/lib/nodes.js +++ b/lib/nodes.js @@ -1049,7 +1049,7 @@ this.ensureConstructor(name); this.body.expressions.push(lname); this.addBoundFunctions(o); - klass = new Parens(new Call(new Code([], this.body)), true); + klass = new Parens(Closure.wrap(this.body), true); if (this.variable) { klass = new Assign(this.variable, klass); } diff --git a/src/nodes.coffee b/src/nodes.coffee index bea77980..cd8667ef 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -841,7 +841,7 @@ exports.Class = class Class extends Base @body.expressions.push lname @addBoundFunctions o - klass = new Parens new Call(new Code [], @body), true + klass = new Parens Closure.wrap(@body), true klass = new Assign @variable, klass if @variable klass.compile o diff --git a/test/test_classes.coffee b/test/test_classes.coffee index 384fa232..0ca80708 100644 --- a/test/test_classes.coffee +++ b/test/test_classes.coffee @@ -354,3 +354,17 @@ class A @c = -> 5 eq A.B.c(), 5 + + +# `class extends this` ... +class A + func: -> 'A' + +B = null +makeClass = -> + B = class extends this + func: -> super + ' B' + +makeClass.call A + +eq (new B()).func(), 'A B'