* actually fix #19015

* more tests

* round out
This commit is contained in:
metagn
2023-04-17 21:56:52 +03:00
committed by GitHub
parent 202b190473
commit 9dc1f2dd0f
2 changed files with 31 additions and 1 deletions

View File

@@ -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

View File

@@ -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()