mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-04 02:44:44 +00:00
* actually fix #19015 * more tests * round out
This commit is contained in:
@@ -2389,7 +2389,9 @@ proc findFirstArgBlock(m: var TCandidate, n: PNode): int =
|
||||
# checking `nfBlockArg in n[a2].flags` wouldn't work inside templates
|
||||
if n[a2].kind != nkStmtList: break
|
||||
let formalLast = m.callee.n[m.callee.n.len - (n.len - a2)]
|
||||
if formalLast.kind == nkSym and formalLast.sym.ast == nil:
|
||||
# parameter has to occupy space (no default value, not void or varargs)
|
||||
if formalLast.kind == nkSym and formalLast.sym.ast == nil and
|
||||
formalLast.sym.typ.kind notin {tyVoid, tyVarargs}:
|
||||
result = a2
|
||||
else: break
|
||||
|
||||
|
||||
@@ -79,6 +79,34 @@ template main =
|
||||
foobar3
|
||||
foobar4
|
||||
doAssert a2 == (1, 20, "\nfoobar1\nfoobar2", "\nfoobar3\nfoobar4")
|
||||
|
||||
block: # issue #19015
|
||||
template hi(a: untyped, b: varargs[untyped]): untyped =
|
||||
a
|
||||
|
||||
var worked = false
|
||||
hi:
|
||||
worked = true
|
||||
doAssert worked
|
||||
worked = false
|
||||
hi(doAssert(not worked)):
|
||||
doesntCompile
|
||||
hi(doAssert(not worked), doesntCompile, againDoesntCompile):
|
||||
definitelyDoesntCompile
|
||||
|
||||
template hi2(a: bool, b: untyped, c: varargs[untyped]): untyped =
|
||||
b
|
||||
doAssert a
|
||||
|
||||
hi2 worked:
|
||||
worked = true
|
||||
doAssert worked
|
||||
hi2 worked, doAssert(worked):
|
||||
doesntCompile
|
||||
hi2 worked, doAssert(worked), doesntCompile, againDoesntCompile:
|
||||
definitelyDoesntCompile
|
||||
hi2 worked, doAssert(worked), againDoesntCompile:
|
||||
definitelyDoesntCompile
|
||||
|
||||
static: main()
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user