Skip to content

Commit c5a8a37

Browse files
committed
Class declaration as statement @0.6
1 parent db2d42b commit c5a8a37

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package csep.tests
2+
3+
import org.junit.Test
4+
5+
class ClassTest extends ParserTestBase {
6+
7+
@Test
8+
def void testBasic() {
9+
ok('''
10+
class NicePerson extends Person
11+
firstName: "John"
12+
lastName: "Doe"
13+
14+
introduce: -> print "I am #{firstName} #{lastName}"
15+
16+
greet: (other) ->
17+
print "Hello #{other}"
18+
''')
19+
}
20+
}

csep.tests/src/csep/tests/MissingFeaturesTest.xtend

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,18 @@ class MissingFeaturesTest extends ParserTestBase {
5656
''')
5757
ok('a = readInfo() while true')
5858
}
59+
60+
@Test
61+
def void testClass() {
62+
// deeply nested class name
63+
shouldBeOk('class a.b.c')
64+
// class declaration as expression
65+
shouldBeOk('c = class extends Foo')
66+
// class declaration as expression
67+
shouldBeOk('class A extends B extends C')
68+
// class name as property
69+
shouldBeOk('class "str".length')
70+
// class extends any expression
71+
shouldBeOk('class A extends 3')
72+
}
5973
}

csep/src/csep/CoffeeScript.xtext

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,23 @@ Line:
1717

1818
Stmt:
1919
ReturnStmt |
20-
ThrowStmt;
20+
ThrowStmt |
21+
ClassDeclaration;
2122

2223
ReturnStmt:
2324
RETURN exp=Expression;
2425

2526
ThrowStmt:
2627
THROW exp=Expression;
2728

29+
ClassDeclaration:
30+
{ClassDeclaration}
31+
CLASS (
32+
body=Block |
33+
(EXTENDS extend=Expression body=Block?) |
34+
(name=(Id | Property) (EXTENDS extend=Expression)? body=Block)
35+
)?;
36+
2837
Expression:
2938
Postfix;
3039

@@ -324,7 +333,7 @@ terminal RETURN: 'return';
324333
terminal RPAREN: ')';
325334
terminal STATEMENT: 'dummy STATEMENT';
326335
terminal STRING: '"' (('a'..'z') | ' ')* '"';
327-
terminal SUPER: 'dummy SUPER';
336+
terminal SUPER: 'super';
328337
terminal SWITCH: 'dummy SWITCH';
329338
terminal TERMINATOR: '\n'+;
330339
terminal THEN: 'dummy THEN';

0 commit comments

Comments
 (0)