Skip to content

Commit 41391f5

Browse files
committed
New syntax for class inheritance
1 parent c660d4e commit 41391f5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+69
-69
lines changed

docs/manual.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ class Base def
787787
destructor def
788788
print "Base destructor"
789789
790-
class Derived(Base) def
790+
class Derived: Base def
791791
y: Int
792792
793793
constructor def
@@ -814,7 +814,7 @@ class A def
814814
func f(x: Int): Void def
815815
print "A: {x}"
816816
817-
class B(A) def
817+
class B: A def
818818
func f(x: Int): Void def
819819
print "B: {x}"
820820
super(x//2)
@@ -829,7 +829,7 @@ Methods can be abstract. If a class has any abstract methods, it cannot be insta
829829
class Abstract def
830830
func f() abstract
831831
832-
class Concrete(Abstract) def
832+
class Concrete: Abstract def
833833
func f(): Void def
834834
print "ok"
835835

src/parser.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def parse_stmt(self):
239239
return {
240240
**self.node('StmtClass', token),
241241
'id': self.parse_id(),
242-
'base': self.match('(') and (self.parse_type(), self.expect(')'))[0] or None,
242+
'base': self.match(':') and self.parse_type() or None,
243243
'members': self.expect('def') and self.parse_class_member_list(),
244244
}
245245
self.backtrack() # backtrack if no keyword has been matched

test/bad/classes/abstract02.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class A def
44

55
func g() abstract
66

7-
class B(A) def
7+
class B: A def
88
func f(): Void def
99
skip
1010

test/bad/classes/constructor06.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ class A def
33
constructor def
44
skip
55

6-
class B(A) def
6+
class B: A def
77
constructor def
88
super()

test/bad/classes/destructor02.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ class A def
33
destructor def
44
skip
55

6-
class B(A) def
6+
class B: A def
77
destructor def
88
super()

test/bad/classes/inheritance01.err

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
:2:9: Type `String` is not a class.
1+
:2:10: Type `String` is not a class.

test/bad/classes/inheritance01.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11

2-
class A(String) def
2+
class A: String def
33
x: Int

test/bad/classes/inheritance02.err

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
:2:9: Identifier `XYZ` does not represent a type.
1+
:2:10: Identifier `XYZ` does not represent a type.

test/bad/classes/inheritance02.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11

2-
class A(XYZ) def
2+
class A: XYZ def
33
x: Int

test/bad/classes/inheritance03.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class Base def
33
x: Int
44

5-
class Sub(Base) def
5+
class Sub: Base def
66
y: Int
77

88
sub = Sub()

test/bad/classes/inheritance04.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
class Base def
33
x: Int
44

5-
class Sub1(Base) def
5+
class Sub1: Base def
66
y: Int
77

8-
class Sub2(Base) def
8+
class Sub2: Base def
99
y: Int
1010

1111

test/bad/classes/inheritance05.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
x: Int

test/bad/classes/super02.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ class A def
33
func f(): Void def
44
return
55

6-
class B(A) def
6+
class B: A def
77
func g(): Void def
88
super()

test/bad/classes/super03.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
class A def
33
func f() abstract
44

5-
class B(A) def
5+
class B: A def
66
x: Int
77

8-
class C(B) def
8+
class C: B def
99
func f(): Void def
1010
super()

test/bad/classes/type03.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: Int
77

88
b: [B] = [A()]

test/bad/classes/type04.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: Int
77

88

test/bad/classes/type05.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: Int
77

88
b = [B()]

test/bad/classes/type06.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: Int
77

88
b: {B}? = {B()}

test/bad/classes/type07.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: Int
77

88
b = [[B()]]

test/good/classes/abstract01.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
func f() abstract
44

5-
class B(A) def
5+
class B: A def
66
func f(): Void def
77
print 'B'
88

test/good/classes/constructor04.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class A def
66
print this.x
77

88

9-
class B(A) def
9+
class B: A def
1010
y: Rat
1111

1212
constructor def

test/good/classes/constructor05.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ class A def
44
print 'A'
55

66

7-
class B(A) def
7+
class B: A def
88
x: Int
99

1010

11-
class C(B) def
11+
class C: B def
1212
constructor def
1313
print 'C'
1414

test/good/classes/constructor06.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class A def
1010
constructor def
1111
print 'A'
1212

13-
class B(A) def
13+
class B: A def
1414
y: Float = f(2)
1515

1616
constructor def

test/good/classes/destructor04.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class A def
66
print "A {this.x}"
77

88

9-
class B(A) def
9+
class B: A def
1010
y: Float
1111

1212
destructor def

test/good/classes/destructor05.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ class A def
44
print 'A'
55

66

7-
class B(A) def
7+
class B: A def
88
x: Int
99

1010

11-
class C(B) def
11+
class C: B def
1212
destructor def
1313
print 'C'
1414

test/good/classes/destructor06.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class A def
33
x: Char
44

55

6-
class B(A) def
6+
class B: A def
77
destructor def
88
print this.x
99

test/good/classes/inheritance01.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: String
77

88
b = B()

test/good/classes/inheritance02.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int = 2
44

5-
class B(A) def
5+
class B: A def
66
y: String = "y"
77

88
b: B = B()

test/good/classes/inheritance03.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class A def
66
func g(): String def
77
return "A.g"
88

9-
class B(A) def
9+
class B: A def
1010
func f(): String def
1111
return "B.f"
1212

test/good/classes/inheritance04.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class Z def
33
func f(x: Char = 'Z'): Void def
44
print x
55

6-
class Y(Z) def
6+
class Y: Z def
77
x: Int
88

99
Y().f('Y')

test/good/classes/inheritance05.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class A def
55
constructor def
66
print this.s
77

8-
class B(A) def
8+
class B: A def
99
x: Int
1010

1111
B("B")

test/good/classes/inheritance06.px

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ class A def
55
func toString(): String def
66
return this.c.toString()
77

8-
class B(A) def
8+
class B: A def
99
b: Bool
1010

1111
func toString(): String def
1212
return "{this.c} {this.b}"
1313

14-
class C(B) def
14+
class C: B def
1515
x: Int
1616

17-
class D(A) def
17+
class D: A def
1818
x: Int = 42
1919

2020
func toString(): String def

test/good/classes/inheritance07.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
class A def
33
x: Char = 'A'
44

5-
class B(A) def
5+
class B: A def
66
constructor def
77
this.x = 'B'
88

9-
class C(B) def
9+
class C: B def
1010
constructor def
1111
this.x = 'C'
1212

test/good/classes/inheritance08.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: String = "A"
44

5-
class B(A) def
5+
class B: A def
66
constructor def
77
this.x = "B"
88

test/good/classes/inheritance09.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class A def
33
func toString(): String def
44
return "A"
55

6-
class B(A) def
6+
class B: A def
77
func toString(): String def
88
return "B"
99

test/good/classes/inheritance10.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
class A def
33
x: Bool
44

5-
class B(A) def
5+
class B: A def
66
y: Char = '?'
77

88
func f(): Void def
99
print this.x
1010

11-
class C(B) def
11+
class C: B def
1212
z: String
1313

1414

test/good/classes/init03.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class A def
55
func f(): Void def
66
skip
77

8-
class B(A) def
8+
class B: A def
99
x: Rat
1010
a: A
1111

test/good/classes/print04.px

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class A def
33
x: Int
44

5-
class B(A) def
5+
class B: A def
66
y: Float
77

88
print A()

test/good/classes/print05.px

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
class A def
33
s: String
44

5-
class B(A) def
5+
class B: A def
66
func toString(): String def
77
return this.s
88

9-
class C(B) def
9+
class C: B def
1010
y: Int
1111

1212

0 commit comments

Comments
 (0)