fixes #3548
This commit is contained in:
parent
995727ffd0
commit
db56174a19
3 changed files with 26 additions and 8 deletions
|
|
@ -145,6 +145,20 @@ proc notFoundError*(c: PContext, n: PNode, errors: CandidateErrors) =
|
||||||
else:
|
else:
|
||||||
localError(n.info, errGenerated, result)
|
localError(n.info, errGenerated, result)
|
||||||
|
|
||||||
|
proc bracketNotFoundError(c: PContext; n: PNode) =
|
||||||
|
var errors: CandidateErrors = @[]
|
||||||
|
var o: TOverloadIter
|
||||||
|
let headSymbol = n[0]
|
||||||
|
var symx = initOverloadIter(o, c, headSymbol)
|
||||||
|
while symx != nil:
|
||||||
|
if symx.kind in routineKinds:
|
||||||
|
errors.add((symx, 0))
|
||||||
|
symx = nextOverloadIter(o, c, headSymbol)
|
||||||
|
if errors.len == 0:
|
||||||
|
localError(n.info, "could not resolve: " & $n)
|
||||||
|
else:
|
||||||
|
notFoundError(c, n, errors)
|
||||||
|
|
||||||
proc resolveOverloads(c: PContext, n, orig: PNode,
|
proc resolveOverloads(c: PContext, n, orig: PNode,
|
||||||
filter: TSymKinds;
|
filter: TSymKinds;
|
||||||
errors: var CandidateErrors): TCandidate =
|
errors: var CandidateErrors): TCandidate =
|
||||||
|
|
|
||||||
|
|
@ -1390,15 +1390,16 @@ proc semAsgn(c: PContext, n: PNode; mode=asgnNormal): PNode =
|
||||||
# --> `[]=`(a, i, x)
|
# --> `[]=`(a, i, x)
|
||||||
let oldBracketExpr = c.p.bracketExpr
|
let oldBracketExpr = c.p.bracketExpr
|
||||||
a = semSubscript(c, a, {efLValue})
|
a = semSubscript(c, a, {efLValue})
|
||||||
if a == nil and mode != noOverloadedSubscript:
|
if a == nil:
|
||||||
result = buildOverloadedSubscripts(n.sons[0], getIdent"[]=")
|
result = buildOverloadedSubscripts(n.sons[0], getIdent"[]=")
|
||||||
add(result, n[1])
|
add(result, n[1])
|
||||||
result = semExprNoType(c, result)
|
if mode == noOverloadedSubscript:
|
||||||
c.p.bracketExpr = oldBracketExpr
|
bracketNotFoundError(c, result)
|
||||||
return result
|
return n
|
||||||
elif a == nil:
|
else:
|
||||||
localError(n.info, "could not resolve: " & $n[0])
|
result = semExprNoType(c, result)
|
||||||
return n
|
c.p.bracketExpr = oldBracketExpr
|
||||||
|
return result
|
||||||
c.p.bracketExpr = oldBracketExpr
|
c.p.bracketExpr = oldBracketExpr
|
||||||
of nkCurlyExpr:
|
of nkCurlyExpr:
|
||||||
# a{i} = x --> `{}=`(a, i, x)
|
# a{i} = x --> `{}=`(a, i, x)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,10 @@ proc semArrGet(c: PContext; n: PNode; flags: TExprFlags): PNode =
|
||||||
result = semSubscript(c, result, flags)
|
result = semSubscript(c, result, flags)
|
||||||
c.p.bracketExpr = oldBracketExpr
|
c.p.bracketExpr = oldBracketExpr
|
||||||
if result.isNil:
|
if result.isNil:
|
||||||
localError(n.info, "could not resolve: " & $n)
|
let x = copyTree(n)
|
||||||
|
x.sons[0] = newIdentNode(getIdent"[]", n.info)
|
||||||
|
bracketNotFoundError(c, x)
|
||||||
|
#localError(n.info, "could not resolve: " & $n)
|
||||||
result = n
|
result = n
|
||||||
|
|
||||||
proc semArrPut(c: PContext; n: PNode; flags: TExprFlags): PNode =
|
proc semArrPut(c: PContext; n: PNode; flags: TExprFlags): PNode =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue