fix crash on sigmatch (#11913)

This commit is contained in:
Timothee Cour 2019-08-08 05:41:23 -07:00 • committed by Andreas Rumpf
commit fda51b6ca2
2 changed files with 4 additions and 3 deletions

View file

@ -196,6 +196,7 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
case err.firstMismatch.kind case err.firstMismatch.kind
of kUnknownNamedParam: candidates.add("\n unknown named parameter: " & $nArg[0]) of kUnknownNamedParam: candidates.add("\n unknown named parameter: " & $nArg[0])
of kAlreadyGiven: candidates.add("\n named param already provided: " & $nArg[0]) of kAlreadyGiven: candidates.add("\n named param already provided: " & $nArg[0])
of kPositionalAlreadyGiven: candidates.add("\n positional param was already given as named param")
of kExtraArg: candidates.add("\n extra argument given") of kExtraArg: candidates.add("\n extra argument given")
of kMissingParam: candidates.add("\n missing parameter: " & nameParam) of kMissingParam: candidates.add("\n missing parameter: " & nameParam)
of kTypeMismatch, kVarNeeded: of kTypeMismatch, kVarNeeded:

View file

@ -21,7 +21,7 @@ when (defined(booting) or defined(nimsuggest)) and not defined(leanCompiler):
type type
MismatchKind* = enum MismatchKind* = enum
kUnknown, kAlreadyGiven, kUnknownNamedParam, kTypeMismatch, kVarNeeded, kUnknown, kAlreadyGiven, kUnknownNamedParam, kTypeMismatch, kVarNeeded,
kMissingParam, kExtraArg kMissingParam, kExtraArg, kPositionalAlreadyGiven
MismatchInfo* = object MismatchInfo* = object
kind*: MismatchKind # reason for mismatch kind*: MismatchKind # reason for mismatch
@ -2432,8 +2432,8 @@ proc matchesAux(c: PContext, n, nOrig: PNode,
formal = m.callee.n.sons[f].sym formal = m.callee.n.sons[f].sym
m.firstMismatch.kind = kTypeMismatch m.firstMismatch.kind = kTypeMismatch
if containsOrIncl(marker, formal.position) and container.isNil: if containsOrIncl(marker, formal.position) and container.isNil:
m.firstMismatch.kind = kAlreadyGiven m.firstMismatch.kind = kPositionalAlreadyGiven
# already in namedParams: (see above remark) # positional param already in namedParams: (see above remark)
when false: localError(n.sons[a].info, errCannotBindXTwice, formal.name.s) when false: localError(n.sons[a].info, errCannotBindXTwice, formal.name.s)
noMatch() noMatch()
return return