Skip to content

Commit 800116d

Browse files
authored
Merge pull request #4426 from connec/class-dynamic-key-scope
[CS2] Fix scope of assignments in dynamic class keys
2 parents 9e13100 + 4f6073f commit 800116d

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

lib/coffee-script/nodes.js

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/nodes.coffee

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,8 +2009,10 @@ exports.Code = class Code extends Base
20092009

20102010
# We need to compile the body before method names to ensure super references are handled
20112011
if @isMethod
2012+
[methodScope, o.scope] = [o.scope, o.scope.parent]
20122013
name = @name.compileToFragments o
20132014
name.shift() if name[0].code is '.'
2015+
o.scope = methodScope
20142016

20152017
answer = @joinFragmentArrays (@makeCode m for m in modifiers), ' '
20162018
answer.push @makeCode ' ' if modifiers.length and name

test/classes.coffee

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,22 @@ test "#1392 calling `super` in methods defined on namespaced classes", ->
845845
@a::m = -> super
846846
eq 5, (new C.a).m()
847847

848+
849+
test "dynamic method names", ->
850+
class A
851+
"#{name = 'm'}": -> 1
852+
eq 1, new A().m()
853+
854+
class B extends A
855+
"#{name = 'm'}": -> super
856+
eq 1, new B().m()
857+
858+
getName = -> 'm'
859+
class C
860+
"#{name = getName()}": -> 1
861+
eq 1, new C().m()
862+
863+
848864
test "dynamic method names and super", ->
849865
class Base
850866
@m: -> 6

0 commit comments

Comments
 (0)