Skip to content

Commit 38f5963

Browse files
connecGeoffreyBooth
authored andcommitted
Use free variables for anonymous classes (#4826)
Fixes #4822.
1 parent ffbe51e commit 38f5963

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

lib/coffeescript/nodes.js

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

src/nodes.coffee

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1871,11 +1871,6 @@ exports.ExecutableClassBody = class ExecutableClassBody extends Base
18711871
if argumentsNode = @body.contains isLiteralArguments
18721872
argumentsNode.error "Class bodies shouldn't reference arguments"
18731873

1874-
@name = @class.name ? @defaultClassVariableName
1875-
directives = @walkBody()
1876-
@setContext()
1877-
1878-
ident = new IdentifierLiteral @name
18791874
params = []
18801875
args = [new ThisLiteral]
18811876
wrapper = new Code params, @body
@@ -1885,6 +1880,11 @@ exports.ExecutableClassBody = class ExecutableClassBody extends Base
18851880

18861881
o.classScope = wrapper.makeScope o.scope
18871882

1883+
@name = @class.name ? o.classScope.freeVariable @defaultClassVariableName
1884+
ident = new IdentifierLiteral @name
1885+
directives = @walkBody()
1886+
@setContext()
1887+
18881888
if @class.hasNameClash
18891889
parent = new IdentifierLiteral o.classScope.freeVariable 'superClass'
18901890
wrapper.params.push new Param parent

test/classes.coffee

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1858,6 +1858,13 @@ test "#4724: backticked expression in a class body with hoisted member", ->
18581858
eq 42, a.x
18591859
eq 84, a.hoisted
18601860

1861+
test "#4822: nested anonymous classes use non-conflicting variable names", ->
1862+
Class = class
1863+
@a: class
1864+
@b: 1
1865+
1866+
eq Class.a.b, 1
1867+
18611868
test "#4827: executable class body wrappers have correct context", ->
18621869
test = ->
18631870
class @A

0 commit comments

Comments
 (0)