lang: fn aliases dispatch like their target (fix 0121) — scan-time registration through the shared alias-chain walk
Renamed fn aliases failed for EVERY kind (the filed pack-only scope was a same-name confound: same-name re-exports already resolved through the name-keyed fn_ast_map). scanDecls now follows ident-/ns.X-RHS const alias chains (aliasedFnDecl; 0120's hop walk extracted as followAliasChain) and registers the alias name in fn_ast_map (absent-only), so every dispatch path — early pack/comptime/generic, plain lazy-lower, plan-side typing — sees the target decl unchanged. my_print :: s.print; / my_format :: s.format; now work (the std.sx re-export shape). Regression: examples/0546 (+rich). Gates: zig build test 0, suite 588/588.
This commit is contained in:
17
specs.md
17
specs.md
@@ -1270,6 +1270,23 @@ chain resolves with the visibility of the file that declares THAT hop,
|
||||
not the use site's. Not yet supported: a qualified head whose namespace
|
||||
member is itself an alias (`ns.BoxAlias(..)`).
|
||||
|
||||
### Function Aliases
|
||||
|
||||
Functions alias the same way — bare or namespace-member RHS, renamed or
|
||||
same-name — and the alias dispatches exactly like the target. This covers
|
||||
every fn kind: plain, runtime-generic (`[]$T` / `$T: Type`), and
|
||||
comptime-pack (`..$args`, e.g. `print` / `format`):
|
||||
|
||||
```sx
|
||||
s :: #import "modules/std.sx";
|
||||
my_print :: s.print; // comptime-pack fn through a namespace
|
||||
helper2 :: r.helper; // renamed plain fn
|
||||
my_print("x = {}\n", helper2());
|
||||
```
|
||||
|
||||
(For making an alias *dot-callable*, see `name :: ufcs target;` in the
|
||||
UFCS section — that is a separate, explicit opt-in.)
|
||||
|
||||
### Generic Functions (Monomorphization)
|
||||
Functions can be parameterized over types using `$T` syntax. The `$` prefix introduces a type parameter; subsequent uses of the name reference it.
|
||||
```sx
|
||||
|
||||
Reference in New Issue
Block a user