mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-11 22:08:54 +00:00
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:
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user