From 1bc3f44f1a340607c79eb5cc318f1233149f69a3 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Wed, 17 Jul 2019 16:36:40 +0200 Subject: [PATCH] [refactoring] don't use 'defer' (cherry picked from commit 210988c5324aa71c595e91aafe5a71dc8273a639) --- compiler/sigmatch.nim | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 655ee83f0a..e9ae05c271 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -2286,7 +2286,7 @@ proc matchesAux(c: PContext, n, nOrig: PNode, # better match over other routines with no such restriction: inc(m.genericMatches, 100) else: - m.state = csNoMatch + noMatch() return if formal.typ.kind == tyVar: @@ -2355,7 +2355,7 @@ proc matchesAux(c: PContext, n, nOrig: PNode, # bug #3836 of why that is not sound (other overload with # different parameter names could match later on): when false: localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) - m.state = csNoMatch + noMatch() return m.baseTypeMatch = false m.typedescMatched = false @@ -2405,7 +2405,7 @@ proc matchesAux(c: PContext, n, nOrig: PNode, incrIndexType(container.typ) checkConstraint(n.sons[a]) else: - m.state = csNoMatch + noMatch() return else: m.state = csNoMatch @@ -2413,12 +2413,13 @@ proc matchesAux(c: PContext, n, nOrig: PNode, else: if m.callee.n.sons[f].kind != nkSym: internalError(c.config, n.sons[a].info, "matches") + noMatch() return formal = m.callee.n.sons[f].sym if containsOrIncl(marker, formal.position) and container.isNil: # already in namedParams: (see above remark) when false: localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) - m.state = csNoMatch + noMatch() return if formal.typ.isVarargsUntyped: @@ -2465,10 +2466,13 @@ proc matchesAux(c: PContext, n, nOrig: PNode, # this assertion can be off localError(c.config, n.sons[a].info, "cannot convert $1 to $2" % [ typeToString(n.sons[a].typ), typeToString(formal.typ) ]) - m.state = csNoMatch + noMatch() return checkConstraint(n.sons[a]) inc(a) + # for some edge cases (see tdont_return_unowned_from_owned test case) + m.firstMismatch.arg = a + m.firstMismatch.formal = formal proc semFinishOperands*(c: PContext, n: PNode) = # this needs to be called to ensure that after overloading resolution every