Skip to content

generic args unify - #2564

Merged
Araq merged 2 commits into
masterfrom
araq-generic-args-unify
Sep 21, 2026
Merged

Araq merged 2 commits into
masterfrom
araq-generic-args-unify

Conversation

@Araq

@Araq Araq commented Sep 21, 2026

Copy link
Copy Markdown
Member

No description provided.

gmpreussner and others added 2 commits September 19, 2026 16:00
Type instantiation used semStaticInvokeArg, which semchecked static generic
arguments as runtime values of the parameter's element type (e.g. openArray[int]).
That rejected array literals that routine calls already accepted via
staticValueToBind, so `Box[[1, 2, 3]]` failed while `countValues[[1, 2, 3]]()`
worked.

Route type instantiation through the same bind/validate pipeline as routine
overload resolution: sem each explicit arg under AllowValues, then call
matchGenericExplicitArgs and rewrite static args with buildCanonicalGenericArgs.
Add genericParams to walk generic parameters of routines and types in one place;
refactor matchTypevars to delegate. Remove the duplicate semStaticInvokeArg /
isStaticValue helpers from semtypes.nim.

Also fold const arrays against their array type when binding to
static[openArray[T]], so `SizedBox[shape]` canonicalizes like `SizedBox[[…]]`.
Report constraint mismatches (with concept missing: detail) at the argument
site via genericArgErrorMsg, matching routine diagnostics.

Tests: type-position openArray cases in tstaticparams; new errmsgs companion
tstaticopenarraytype; update tstaticparamruntime and tsubscriptstaticgeneric
.msgs for unified wording.

Fixes #2549
Sem, bind and canonical emission of each type-instantiation argument now
happen in a single loop over the generic parameters instead of sem-all,
then match-all over the half-built `dest`, then a third walk to rebuild the
canonical args (plus a fourth to count parameters). The per-argument logic
is factored out as `matchExplicitGenericArg`, shared with routine overload
resolution; `buildCanonicalGenericArgs` is gone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Araq
Araq merged commit 86c0e94 into master Sep 21, 2026
9 checks passed
@Araq
Araq deleted the araq-generic-args-unify branch September 21, 2026 17:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants