fix generics

This commit is contained in:
nora 2023-12-16 13:45:09 +01:00
parent dbd49d852f
commit 66d95dfeeb
18 changed files with 154 additions and 158 deletions

View file

@ -0,0 +1,6 @@
//@check-pass
type A[T] = T;
function ohno(x: A[A[A[I32]]]): I32 = x;
function main() = ;

View file

@ -1,4 +1,4 @@
error: type I32 does not take generic arguments
error: type I32 does not take any generic arguments but 1 were passed
--> $DIR/generics_on_primitive.nil:2
2 | let a: I32[I32] = 0;
^^^

View file

@ -1,17 +0,0 @@
/home/nils/projects/riverdelta/target/ast.js:110
throw new Error(`substitution out of range, param index ${ty.idx} of param ${ty.name} out of range for length ${genericArgs.length}`);
^
Error: substitution out of range, param index 0 of param T out of range for length 0
at substituteTy (/home/nils/projects/riverdelta/target/ast.js:110:23)
at subst (/home/nils/projects/riverdelta/target/ast.js:106:27)
at Array.map (<anonymous>)
at substituteTy (/home/nils/projects/riverdelta/target/ast.js:125:45)
at typeOfItem (/home/nils/projects/riverdelta/target/typeck/item.js:193:33)
at Object.itemInner (/home/nils/projects/riverdelta/target/typeck/index.js:63:54)
at Object.item (/home/nils/projects/riverdelta/target/ast.js:146:34)
at /home/nils/projects/riverdelta/target/ast.js:164:55
at Array.map (<anonymous>)
at foldAst (/home/nils/projects/riverdelta/target/ast.js:164:34)
Node.js v20.10.0

View file

@ -1,3 +1,4 @@
//@check-pass
type A[T] = struct { a: T };
type B[T, U, V] = struct {
b: T,
@ -6,3 +7,5 @@ type B[T, U, V] = struct {
type C = ();
function test(a: A[I32], b: B[I32, Int, I32], c: C) = ;
function main() = ;

View file

@ -1,17 +0,0 @@
/home/nils/projects/riverdelta/target/ast.js:110
throw new Error(`substitution out of range, param index ${ty.idx} of param ${ty.name} out of range for length ${genericArgs.length}`);
^
Error: substitution out of range, param index 0 of param T out of range for length 0
at substituteTy (/home/nils/projects/riverdelta/target/ast.js:110:23)
at subst (/home/nils/projects/riverdelta/target/ast.js:106:27)
at Array.map (<anonymous>)
at substituteTy (/home/nils/projects/riverdelta/target/ast.js:125:45)
at typeOfItem (/home/nils/projects/riverdelta/target/typeck/item.js:193:33)
at Object.itemInner (/home/nils/projects/riverdelta/target/typeck/index.js:63:54)
at Object.item (/home/nils/projects/riverdelta/target/ast.js:146:34)
at /home/nils/projects/riverdelta/target/ast.js:164:55
at Array.map (<anonymous>)
at foldAst (/home/nils/projects/riverdelta/target/ast.js:164:34)
Node.js v20.10.0

View file

@ -21,3 +21,5 @@ function test(
c2: C[],
c3: C[I32],
) = ;
function main() = ;

View file

@ -1,17 +1,24 @@
/home/nils/projects/riverdelta/target/ast.js:110
throw new Error(`substitution out of range, param index ${ty.idx} of param ${ty.name} out of range for length ${genericArgs.length}`);
^
Error: substitution out of range, param index 0 of param T out of range for length 0
at substituteTy (/home/nils/projects/riverdelta/target/ast.js:110:23)
at subst (/home/nils/projects/riverdelta/target/ast.js:106:27)
at Array.map (<anonymous>)
at substituteTy (/home/nils/projects/riverdelta/target/ast.js:125:45)
at typeOfItem (/home/nils/projects/riverdelta/target/typeck/item.js:193:33)
at Object.itemInner (/home/nils/projects/riverdelta/target/typeck/index.js:63:54)
at Object.item (/home/nils/projects/riverdelta/target/ast.js:146:34)
at /home/nils/projects/riverdelta/target/ast.js:164:55
at Array.map (<anonymous>)
at foldAst (/home/nils/projects/riverdelta/target/ast.js:164:34)
Node.js v20.10.0
error: missing generics for type A, expected 1, but only 0 were passed
--> $DIR/wrong_amount.nil:9
9 | a1: A,
^
error: missing generics for type A, expected 1, but only 0 were passed
--> $DIR/wrong_amount.nil:10
10 | a2: A[],
^
error: missing generics for type B, expected 3, but only 0 were passed
--> $DIR/wrong_amount.nil:14
14 | b1: B,
^
error: missing generics for type B, expected 3, but only 0 were passed
--> $DIR/wrong_amount.nil:15
15 | b2: B[],
^
error: missing generics for type B, expected 3, but only 2 were passed
--> $DIR/wrong_amount.nil:16
16 | b3: B[Int, Int],
^
error: type () does not take any generic arguments but 1 were passed
--> $DIR/wrong_amount.nil:22
22 | c3: C[I32],
^