Meow Programming Language v0.21.2: A Call Goes to the Declaration the Name Reaches
Released 2026-08-20. v0.21.1 settled what a name read rather than called reaches. Calling through the same name did not follow — it went to the top-level function of that name, in both halves of the compiler.
meow greet(who string) string { bring "hi " + who }
meow rename() string {
nyan greet = paw(a, b) { bring a + "/" + b }
bring greet("x", "y")
}
The checker looked the name up in its table of top-level functions before it looked in scope, so the call was checked against the wrong signature and refused outright:
Hiss! Function greet expects at most 1 arguments but got 2
With a matching arity it got past the checker only to fail in codegen, which emitted a direct Go call to the function:
invalid operation: cannot call greet (variable of interface type meowrt.Value)
A call asks the same question a read does
v0.21.1 made the checker record which declaration each occurrence reaches. A call is the same question, so it is recorded the same way and both halves ask it: the checker falls through to the in-scope lookup when the name has been taken over, and codegen asks the recorded resolution rather than the table alone.
meow greet(who string) string { bring "hi " + who }
meow rename() string {
nyan greet = paw(a, b) { bring a + "/" + b }
bring greet("x", "y")
}
nya(rename()) # x/y — two arguments is right: the local takes two
nya(greet("nyan")) # hi nyan — outside, the name still reaches the function
This holds across every shape that can take a name over — a local lambda of a
different arity than the function it shadows, a nested meow, and a lambda
held in a lambda’s parameter.
The checker keeps refusing what it should: greet("x", "y") against the
top-level one-argument greet is still an error.
Both backends
The playground runs the checker too, so it had the same fault and is fixed by the same half. Reverting the checker change fails the golden file, the checker test and the interpreter test; reverting the codegen change fails the golden file.
Upgrading
Nothing to change. Programs that worked around this by renaming a local no longer need to, and a program that was refused with a confusing arity error now compiles.
brew upgrade meow
# or
go install github.com/135yshr/meow/cmd/meow@v0.21.2