mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-12 14:23:45 +00:00
fixes #23186 As explained in #23186, generics can transform `genericProc[int]` into a call `` `[]`(genericProc, int) `` which causes a problem when `genericProc` is resemmed, since it is not a resolved generic proc. `[]` needs unresolved generic procs since `mArrGet` also handles explicit generic instantiations, so delay the resolved generic proc check to `semFinishOperands` which is intentionally not called for `mArrGet`. The root issue for [t6137](https://github.com/nim-lang/Nim/blob/devel/tests/generics/t6137.nim) is also fixed (because this change breaks it otherwise), the compiler doesn't consider the possibility that an assigned generic param can be an unresolved static value (note the line `if t.kind == tyStatic: s.ast = t.n` below the change in sigmatch), now it properly errors that it couldn't instantiate it as it would for a type param. ~~The change in semtypinst is just for symmetry with the code above it which also gives a `cannot instantiate` error, it may or may not be necessary/correct.~~ Now removed, I don't think it was correct. Still possible that this has unintended consequences.
26 lines
614 B
Nim
26 lines
614 B
Nim
discard """
|
|
cmd: "nim check --mm:refc $file"
|
|
"""
|
|
# issue #11942
|
|
discard newSeq[system]() #[tt.Error
|
|
^ expression 'system' has no type (or is ambiguous)]#
|
|
|
|
# issue #5167
|
|
template t[B]() =
|
|
echo "foo1"
|
|
|
|
macro m[T]: untyped = nil
|
|
|
|
proc bar(x: proc (x: int)) =
|
|
echo "bar"
|
|
|
|
let x = t #[tt.Error
|
|
^ 't' has unspecified generic parameters]#
|
|
bar t #[tt.Error
|
|
^ type mismatch: got <template [*missing parameters*]()>]#
|
|
|
|
let y = m #[tt.Error
|
|
^ 'm' has unspecified generic parameters]#
|
|
bar m #[tt.Error
|
|
^ type mismatch: got <macro [*missing parameters*](): untyped{.noSideEffect, gcsafe.}>]#
|