fixes #11727 [backport]
This commit is contained in:
parent
87f0d534d6
commit
0996eb174f
3 changed files with 12 additions and 5 deletions
|
|
@ -1345,9 +1345,11 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||||
of opcQuit:
|
of opcQuit:
|
||||||
if c.mode in {emRepl, emStaticExpr, emStaticStmt}:
|
if c.mode in {emRepl, emStaticExpr, emStaticStmt}:
|
||||||
message(c.config, c.debug[pc], hintQuitCalled)
|
message(c.config, c.debug[pc], hintQuitCalled)
|
||||||
msgQuit(int8(toInt(getOrdValue(regs[ra].regToNode))))
|
msgQuit(int8(toInt(getOrdValue(regs[ra].regToNode, onError = toInt128(1)))))
|
||||||
else:
|
else:
|
||||||
return TFullReg(kind: rkNone)
|
return TFullReg(kind: rkNone)
|
||||||
|
of opcInvalidField:
|
||||||
|
stackTrace(c, tos, pc, errFieldXNotFound & regs[ra].node.strVal)
|
||||||
of opcSetLenStr:
|
of opcSetLenStr:
|
||||||
decodeB(rkNode)
|
decodeB(rkNode)
|
||||||
#createStrKeepNode regs[ra]
|
#createStrKeepNode regs[ra]
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ type
|
||||||
opcContainsSet, opcRepr, opcSetLenStr, opcSetLenSeq,
|
opcContainsSet, opcRepr, opcSetLenStr, opcSetLenSeq,
|
||||||
opcIsNil, opcOf, opcIs,
|
opcIsNil, opcOf, opcIs,
|
||||||
opcSubStr, opcParseFloat, opcConv, opcCast,
|
opcSubStr, opcParseFloat, opcConv, opcCast,
|
||||||
opcQuit,
|
opcQuit, opcInvalidField,
|
||||||
opcNarrowS, opcNarrowU,
|
opcNarrowS, opcNarrowU,
|
||||||
opcSignExtend,
|
opcSignExtend,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1719,8 +1719,13 @@ proc genCheckedObjAccessAux(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags
|
||||||
# If the check fails let the user know
|
# If the check fails let the user know
|
||||||
let lab1 = c.xjmp(n, if negCheck: opcFJmp else: opcTJmp, rs)
|
let lab1 = c.xjmp(n, if negCheck: opcFJmp else: opcTJmp, rs)
|
||||||
c.freeTemp(rs)
|
c.freeTemp(rs)
|
||||||
# Not ideal but will do for the moment
|
let strType = getSysType(c.graph, n.info, tyString)
|
||||||
c.gABC(n, opcQuit)
|
var fieldNameRegister: TDest = c.getTemp(strType)
|
||||||
|
let strLit = newStrNode($accessExpr[1], accessExpr[1].info)
|
||||||
|
strLit.typ = strType
|
||||||
|
c.genLit(strLit, fieldNameRegister)
|
||||||
|
c.gABC(n, opcInvalidField, fieldNameRegister)
|
||||||
|
c.freeTemp(fieldNameRegister)
|
||||||
c.patch(lab1)
|
c.patch(lab1)
|
||||||
|
|
||||||
proc genCheckedObjAccess(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) =
|
proc genCheckedObjAccess(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue