Skip to content

Commit 09019fe

Browse files
committed
[Tolk] Refactor parsing types, introduce AST type nodes
Until this MR, parsing any type from tokens immediately resulted in TypePtr. This MR introduces an intermediate AST representation for types, which are resolved at a later step. It's a necessary refactoring towards generics.
1 parent a010537 commit 09019fe

40 files changed

+1328
-1126
lines changed

tolk-tester/tests/invalid-semantics/err-4517.tolk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ fun f(x: int): int {
1010

1111
/**
1212
@compilation_should_fail
13-
@stderr symbol `g` is not a constant
13+
@stderr unknown type name `g`
1414
*/
Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
type asdf = int;
2+
const gcon = 10;
23

34
fun main() {
45
match (10) {
@@ -7,12 +8,21 @@ fun main() {
78

89
var asdf = 5;
910
match (10) {
10-
asdf => 2, // it's match by expression now
11+
asdf => 2, // also match by type
1112
};
13+
14+
match (10) {
15+
gcon => 2, // match by expression (it's constant)
16+
};
17+
18+
var ten = 10;
19+
match (10) {
20+
ten => 10, // not a constant, tries to lookup a type, fails
21+
}
1222
}
1323

1424
/**
1525
@compilation_should_fail
16-
@stderr symbol `asdf` is not a constant
17-
@stderr asdf => 2
26+
@stderr unknown type name `ten`
27+
@stderr ten => 10
1828
*/

tolk-tester/tests/match-by-expr-tests.tolk

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,18 @@ fun test11(x: bool) {
117117
}
118118

119119

120-
fun main() {}
120+
type asdf = int;
121+
122+
fun main() {
123+
match (10) {
124+
asdf => 1, // it's match by type
125+
};
126+
127+
var asdf = 5;
128+
return match (10) {
129+
asdf => 2, // also match by type, regardless of local var
130+
};
131+
}
121132

122133
/**
123134
@testcase | 101 | 1 | 100

tolk-tester/tests/nullable-tensors.tolk

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -519,14 +519,14 @@ fun main(){}
519519
@testcase | 132 | | -1 0 -1 0 777 (null) (null) -1 0 0
520520
@testcase | 133 | | 60
521521
@testcase | 134 | | 11 21 129
522-
@testcase | 135 | | [ 10 ] [ (null) ] (null) 777 10 146 (null) 146 (null) 0 777 10 143 (null) 143 (null) 0 777 0 0 -1 0 0 -1 0 0 -1 777 0 -1 0 0 -1 0
522+
@testcase | 135 | | [ 10 ] [ (null) ] (null) 777 10 143 (null) 143 (null) 0 777 10 144 (null) 144 (null) 0 777 0 0 -1 0 0 -1 0 0 -1 777 0 -1 0 0 -1 0
523523
@testcase | 136 | 9 | 9 0
524524
@testcase | 136 | null | (null) -1
525-
@testcase | 140 | 8 9 | 8 9 144 (null) (null) 0
525+
@testcase | 140 | 8 9 | 8 9 145 (null) (null) 0
526526
@testcase | 141 | | (null) 10
527527
@testcase | 142 | | 3 3 1 2
528528
@testcase | 143 | -1 0 | 1 2 1 3 777 (null) (null) (null) (null) 0
529-
@testcase | 143 | 0 -1 | 1 (null) 0 3 777 1 2 1 3 145
529+
@testcase | 143 | 0 -1 | 1 (null) 0 3 777 1 2 1 3 146
530530

531531
@fif_codegen
532532
"""

tolk-tester/tests/smart-cast-tests.tolk

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -727,16 +727,16 @@ fun main(x: int?): int {
727727
@testcase | 139 | | 16
728728
@testcase | 140 | 5 | 25
729729
@testcase | 141 | | 1 2
730-
@testcase | 142 | | 5 3 (null) (null) 0 132 3 (null) (null) 0
730+
@testcase | 142 | | 5 3 (null) (null) 0 133 3 (null) (null) 0
731731
@testcase | 143 | | 10 11 (null) 10 11 (null) (null) 0
732732
@testcase | 144 | | 10 11 (null) 10 11 (null) (null) 0
733-
@testcase | 145 | | 5 3 (null) (null) 0 132 3 (null) (null) (null) (null) 0 3 (null) (null) 0
734-
@testcase | 146 | | 3 4 5 3 4 5 131
733+
@testcase | 145 | | 5 3 (null) (null) 0 133 3 (null) (null) (null) (null) 0 3 (null) (null) 0
734+
@testcase | 146 | | 3 4 5 3 4 5 132
735735
@testcase | 147 | | (null) (null) 100 (null) 100 (null) (null) 0
736736
@testcase | 158 | | 123 10 123 5
737737
@testcase | 160 | | 101 109
738738
@testcase | 161 | 9 9 | (null) (null) 0 (null) (null)
739-
@testcase | 161 | 19 0 | 19 0 133 19 0
739+
@testcase | 161 | 19 0 | 19 0 129 19 0
740740

741741
@stderr warning: expression of type `int` can never be `null`, this condition is always true
742742
@stderr warning: unreachable code

tolk-tester/tests/struct-tests.tolk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ type PointAlias = Point;
506506
@testcase | 126 | | 118
507507
@testcase | 127 | | 0 0 131 131 777 -1 -1 0 0 777 0 0 138 777 0 0 777 (null) (null) 0
508508
@testcase | 128 | -1 | (null) (null) 131 -1 0 0 777 (null) (null) 131 -1 0 0
509-
@testcase | 128 | 0 | 1 2 129 0 -1 0 777 0 131 138 0 -1 0
509+
@testcase | 128 | 0 | 1 2 130 0 -1 0 777 0 131 138 0 -1 0
510510
@testcase | 129 | | (null)
511511
@testcase | 130 | -1 | 140 777 (null) 140 777 0 777 0 0
512512
@testcase | 130 | 0 | 139 777 4 1 777 139 777 0 0

tolk-tester/tests/union-types-tests.tolk

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -791,11 +791,11 @@ fun main() {
791791
@testcase | 105 | | 5 5 1 5 1 5
792792
@testcase | 106 | 1 | (null) 0
793793
@testcase | 106 | 2 | 2 1
794-
@testcase | 107 | 1 | (null) 2 3 131 (null) 2 3 131
795-
@testcase | 107 | 3 | 6 7 8 132 6 7 8 132
796-
@testcase | 108 | | (null) 2 3 131 (null) (null) (null) 0 (null) 2 3 131 (null) 2 3 131 (null) (null) (null) 0
797-
@testcase | 109 | | 6 7 8 132 0 (null) -1 (null) (null) (null) 0 -1 (null) (null) (null) 0
798-
@testcase | 110 | | 1 (null) (null) 0 (null) (null) 0 134
794+
@testcase | 107 | 1 | (null) 2 3 129 (null) 2 3 129
795+
@testcase | 107 | 3 | 6 7 8 130 6 7 8 130
796+
@testcase | 108 | | (null) 2 3 129 (null) (null) (null) 0 (null) 2 3 129 (null) 2 3 129 (null) (null) (null) 0
797+
@testcase | 109 | | 6 7 8 130 0 (null) -1 (null) (null) (null) 0 -1 (null) (null) (null) 0
798+
@testcase | 110 | | 1 (null) (null) 0 (null) (null) 0 135
799799
@testcase | 120 | | 5
800800
@testcase | 121 | | -1 0 0 -1 -1 0
801801
@testcase | 122 | 0 0 1 | 36
@@ -807,21 +807,21 @@ fun main() {
807807
@testcase | 125 | 1 1 | 42
808808
@testcase | 126 | | 42
809809
@testcase | 127 | | 1 2 5 1
810-
@testcase | 128 | | (null) (null) 0 777 (null) 2 1 777 3 4 131
810+
@testcase | 128 | | (null) (null) 0 777 (null) 2 1 777 3 4 129
811811
@testcase | 129 | | (null) (null) 0 (null) 5 1
812-
@testcase | 130 | 0 | (null) 5 1 777 (null) (null) 0 777 1 2 131 777 (null) [ 6 ] 135 777 (null) (null) 0
813-
@testcase | 130 | -1 | (null) (null) 0 777 (null) (null) 0 777 1 2 131 777 (null) [ 6 ] 135 777 (null) (null) 0
814-
@testcase | 131 | | (null) 777 5 777 1 2 777 (null) 777 5 777 (null) (null) 0 777 1 2 131
815-
@testcase | 132 | | (null) (null) 5 1 777 (null) (null) 5 42 777 (null) 4 5 131 777 (null) (null) (null) 0
816-
@testcase | 133 | | (null) (null) 5 1 777 (null) (null) 5 42 777 (null) 4 5 131 777 (null) (null) (null) 0
817-
@testcase | 134 | | (null) 5 1 777 (null) 5 1 777 1 2 131 777 1 2 131 777 (null) 5 42 777 5 42 777 5 42
818-
@testcase | 135 | | (null) 5 1 777 (null) (null) 1 2 131 777 (null) (null) 1 2 131 777 (null) (null) 0
819-
@testcase | 136 | | 1 2 131 777 1 2 140 777 1 2 141 777 (null) 1 2 138
812+
@testcase | 130 | 0 | (null) 5 1 777 (null) (null) 0 777 1 2 129 777 (null) [ 6 ] 136 777 (null) (null) 0
813+
@testcase | 130 | -1 | (null) (null) 0 777 (null) (null) 0 777 1 2 129 777 (null) [ 6 ] 136 777 (null) (null) 0
814+
@testcase | 131 | | (null) 777 5 777 1 2 777 (null) 777 5 777 (null) (null) 0 777 1 2 129
815+
@testcase | 132 | | (null) (null) 5 1 777 (null) (null) 5 42 777 (null) 4 5 129 777 (null) (null) (null) 0
816+
@testcase | 133 | | (null) (null) 5 1 777 (null) (null) 5 42 777 (null) 4 5 129 777 (null) (null) (null) 0
817+
@testcase | 134 | | (null) 5 1 777 (null) 5 1 777 1 2 129 777 1 2 129 777 (null) 5 42 777 5 42 777 5 42
818+
@testcase | 135 | | (null) 5 1 777 (null) (null) 1 2 129 777 (null) (null) 1 2 129 777 (null) (null) 0
819+
@testcase | 136 | | 1 2 129 777 1 2 140 777 1 2 141 777 (null) 1 2 142
820820
@testcase | 137 | 1 2 | 1 2 777 1 2 777 1 2 777 [ 1 2 ]
821-
@testcase | 138 | | 1 (null) (null) (null) (null) 0 2 149 777 1 (null) 0 2 143 777 1 5 1 2 143 777 1 (null) 5 1 2 144
821+
@testcase | 138 | | 1 (null) (null) (null) (null) 0 2 146 777 1 (null) 0 2 147 777 1 5 1 2 147 777 1 (null) 5 1 2 148
822822
@testcase | 139 | | 1 (null) (null) (null) (null) 0 2 777 1 (null) 0 2 777 1 5 1 2 777 1 (null) 5 1 2
823823
@testcase | 140 | 5 | 5 42
824-
@testcase | 140 | 15 | 15 129
824+
@testcase | 140 | 15 | 15 131
825825
@testcase | 140 | 90 | 90 49
826826
@testcase | 141 | 7 8 | 7 7 1 8 8 1
827827
@testcase | 141 | null null | (null) (null) 0 (null) (null) 0
@@ -842,9 +842,9 @@ fun main() {
842842
@testcase | 154 | | 100 1
843843
@testcase | 155 | | 5 1 5 1
844844
@testcase | 156 | 1 2 -1 | 2 44 2 2 44 2 2 44 2 44 2 2 2
845-
@testcase | 157 | 1 | (null) 0 (null) 145 777 1 2 131 777 145 145 777 0 0 -1 0 -1 0 0 777 -1 0
846-
@testcase | 157 | 0 | (null) 0 (null) 145 777 (null) (null) 145 777 0 0 777 0 0 -1 0 0 -1 0 777 0 -1
847-
@testcase | 158 | | (null) (null) 145 (null) (null) 145 (null) 0 (null)
845+
@testcase | 157 | 1 | (null) 0 (null) 149 777 1 2 129 777 149 149 777 0 0 -1 0 -1 0 0 777 -1 0
846+
@testcase | 157 | 0 | (null) 0 (null) 149 777 (null) (null) 149 777 0 0 777 0 0 -1 0 0 -1 0 777 0 -1
847+
@testcase | 158 | | (null) (null) 149 (null) (null) 149 (null) 0 (null)
848848
@testcase | 159 | 0 4 | 456
849849
@testcase | 159 | null 0 | 123
850850
@testcase | 160 | | 10 0

tolk-tester/tests/var-apply-tests.tolk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ fun main() {}
264264
@testcase | 112 | -1 -10 -20 | -1
265265
@testcase | 113 | 0 | 12 12
266266
@testcase | 113 | -1 | 12 -1
267-
@testcase | 114 | -1 | 2 3 130
267+
@testcase | 114 | -1 | 2 3 131
268268
@testcase | 114 | 0 | (null) 12 1
269269
@testcase | 115 | | 7 6 7
270270
*/

tolk/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ set(TOLK_SOURCE
99
pipe-discover-parse-sources.cpp
1010
pipe-register-symbols.cpp
1111
pipe-resolve-identifiers.cpp
12+
pipe-resolve-types.cpp
1213
pipe-calc-rvalue-lvalue.cpp
1314
pipe-infer-types-and-calls.cpp
1415
pipe-check-inferred-types.cpp

0 commit comments

Comments
 (0)