Revert "make default values typed in proc AST same as param sym AST" (#24191)

Reverts #24184, reopens #12942, reopens #19118

#24184 seems to have caused a regression in
https://github.com/c-blake/thes and
https://github.com/c-blake/bu/blob/main/rp.nim#L84 reproducible with
`git clone https://github.com/c-blake/cligen; git clone
https://github.com/c-blake/thes; cd thes; nim c -p=../cligen thes`.
Changing the `const` to `let` makes it compile.

A minimization that is probably the same issue is:

```nim
const a: seq[string] = @[]

proc foo(x = a) =
  echo typeof(x)
  echo x

import macros

macro resemFoo() =
  result = getImpl(bindSym"foo")

block:
  resemFoo() # Error: cannot infer the type of parameter 'x'
```

This should be a regression test in a future reimplementation of #24184.
This commit is contained in:
metagn
2024-09-27 16:34:09 +03:00
committed by GitHub
parent 2cdc0e913f
commit 821d0806fe
3 changed files with 2 additions and 54 deletions

View File

@@ -1409,8 +1409,6 @@ proc semProcTypeNode(c: PContext, n, genericParams: PNode,
elif typ.kind == tyStatic:
def = semConstExpr(c, def)
def = fitNode(c, typ, def, def.info)
# keep proc AST updated
a[^1] = def
if not hasType and not hasDefault:
if isType: localError(c.config, a.info, "':' expected")

View File

@@ -10,8 +10,8 @@ func rsplit(s: string; sep: string; maxsplit: int = -1): seq[string]
first type mismatch at position: 2
required type for sep: string
but expression '{':'}' is of type: set[char]
func rsplit(s: string; seps: set[char] = {' ', '\t', '\v', '\r', '\n', '\f'};
maxsplit: int = -1): seq[string]
func rsplit(s: string; seps: set[char] = Whitespace; maxsplit: int = -1): seq[
string]
first type mismatch at position: 3
unknown named parameter: maxsplits

View File

@@ -1,50 +0,0 @@
discard """
nimout: '''
ProcDef
Sym "foo"
Empty
Empty
FormalParams
Empty
IdentDefs
Sym "x"
Empty
Call
Sym "none"
Sym "Natural"
Empty
Empty
DiscardStmt
Empty
ProcDef
Sym "example"
Empty
Empty
FormalParams
Empty
IdentDefs
Sym "a"
Empty
Sym "thing"
Empty
Empty
DiscardStmt
TupleConstr
Sym "a"
Sym "thing"
'''
"""
import options, macros
macro typedTree(n: typed): untyped =
result = n
echo treeRepr n
# issue #19118
proc foo(x = none(Natural)) {.typedTree.} = discard
# issue #12942
var thing = 2
proc example(a = thing) {.typedTree.} =
discard (a, thing)