Skip to content

Commit cc7f1fc

Browse files
committed
[Typer] Constructor type inference
1 parent db65ba8 commit cc7f1fc

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

source/compiler/typer.hexa

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3280,12 +3280,12 @@ class Typer {
32803280
case NodeTypeValue(t):
32813281
// Constructor
32823282
// TODO handle `<T>`
3283-
let type = toType(t, e)
3283+
let typeToCreate = toType(t, e)
32843284
// TODO better idea
32853285
let subj = find(DataHelper.extractTypeName(t))
32863286
parents.set(node, subj)
32873287

3288-
switch type {
3288+
switch typeToCreate {
32893289
case ClassInstance(type):
32903290
if type.constructor == -1 {
32913291
fail('Cannot construct class without `new () {}` constructor', node)
@@ -3294,6 +3294,13 @@ class Typer {
32943294
switch type.parent {
32953295
case Class(t, extend, implement, f, external, kind):
32963296
constructor = types.get(f[type.constructor])
3297+
switch constructor {
3298+
case Function(args, returns, variadic):
3299+
// TODO better idea
3300+
if returns == typeVoid {
3301+
constructor = Type.Function(args, typeToCreate, variadic)
3302+
}
3303+
}
32973304
}
32983305

32993306
type.useless = false

0 commit comments

Comments
 (0)