File tree Expand file tree Collapse file tree 1 file changed +35
-1
lines changed Expand file tree Collapse file tree 1 file changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -3117,7 +3117,41 @@ class Typer {
3117
3117
}
3118
3118
}
3119
3119
case ParametricType(name, _):
3120
- fail('Cannot use generic type `\(name)` as a value', node)
3120
+ if asValue {
3121
+ fail('Cannot use generic type `\(name)` as a value', node)
3122
+ // TODO ^ "you forgot () to call constructor?"
3123
+ }
3124
+
3125
+ let subj = find(name)
3126
+ if subj == null {
3127
+ fail('Cannot find type with name `\(name)`', node)
3128
+ }
3129
+ if parents.get(node) != null, parents.get(node) != subj {
3130
+ fail('Parent overwritten from \(parents.get(node)) to \(subj) for node \(node)' + never, node)
3131
+ }
3132
+ parents.set(node, subj)
3133
+ if let type = types.get(subj) {
3134
+ types.set(node, type)
3135
+ } else {
3136
+ // Try eager on-demand type build
3137
+ switch subj {
3138
+ case Class(_):
3139
+ // TODO better idea
3140
+ let mod = currentModule
3141
+ registerClassType(subj)
3142
+ currentModule = mod
3143
+ case Enum(_):
3144
+ // TODO module trick around this whole `switch`?
3145
+ registerEnumType(subj)
3146
+ }
3147
+
3148
+ if let type = types.get(subj) {
3149
+ types.set(node, type)
3150
+ } else {
3151
+ console.log(positionOf(subj) + '\(name) is here')
3152
+ fail('Cannot find type for `\(name)` even after late build' + never, node)
3153
+ }
3154
+ }
3121
3155
case _:
3122
3156
fail('Cannot use this type as a value', node)
3123
3157
}
You can’t perform that action at this time.
0 commit comments