Files
Nim/compiler
metagn 5cbc7a6d1b fix regression with generic params in static type (#24075)
Caught in https://github.com/metagn/applicates, I'm not sure which
commit causes this but it's also in the 2.0 branch (but not 2.0.2), so
it's not any recent PRs.

If a proc has a static parameter with type `static Foo[T]`, then another
parameter with type `static Bar[T, U]`, the generic instantiation for
`Bar` doesn't match `U` which has type `tyGenericParam`, but matches `T`
since it has type `tyTypeDesc`. The reason is that `concreteType`
returns the type itself for `tyTypeDesc` if `c.isNoCall` (i.e. matching
a generic invocation), but returns `nil` for `tyGenericParam`. I'm
guessing `tyGenericParam` is received here because of #22618, but that
doesn't explain why `T` is still `tyTypeDesc`. I'm not sure.

Regardless, we can just copy the behavior for `tyTypeDesc` to
`tyGenericParam` and also return the type itself when `c.isNoCall`. This
feels like it defeats the purpose of `concreteType` but the way it's
used doesn't make sense without it (generic param can't match another
generic param?). Alternatively we could loosen the `if concrete == nil:
return isNone` checks in some places for specific conditions, whether
`c.isNoCall` or `c.inGenericContext == 0` (though this would need

(cherry picked from commit 24e5b21c90)
2024-12-16 15:11:47 +01:00
..
2022-09-27 10:57:47 +02:00
2022-09-27 10:57:47 +02:00
2024-06-07 15:34:34 +02:00
2024-05-21 14:52:29 +02:00
2024-05-21 14:52:29 +02:00
2017-01-07 22:35:09 +01:00
2023-06-27 22:42:48 +02:00
2019-11-28 17:13:04 +01:00
2024-05-23 13:55:23 +02:00
2023-05-06 21:27:28 +02:00
2023-05-11 10:10:51 +02:00
2021-01-12 09:36:51 +01:00
2022-03-23 20:34:53 +01:00
2022-10-17 23:48:51 +02:00
2023-07-02 22:36:05 +02:00
2024-10-28 14:18:56 +01:00
2024-05-21 14:52:29 +02:00
2023-06-17 05:42:05 +02:00
2023-06-17 05:42:05 +02:00

Nim Compiler

  • This directory contains the Nim compiler written in Nim.
  • Note that this code has been translated from a bootstrapping version written in Pascal.
  • So the code is not a poster child of good Nim code.

See Internals of the Nim Compiler for more information.