fix crash on sigmatch (#11913)
This commit is contained in:
parent
756fabb979
commit
fda51b6ca2
2 changed files with 4 additions and 3 deletions
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue