parent
d130175342
commit
355b275175
1 changed files with 12 additions and 8 deletions
|
|
@ -729,14 +729,16 @@ proc genDeref(p: BProc, e: PNode, d: var TLoc) =
|
||||||
else:
|
else:
|
||||||
putIntoDest(p, d, e, "(*$1)" % [rdLoc(a)], a.storage)
|
putIntoDest(p, d, e, "(*$1)" % [rdLoc(a)], a.storage)
|
||||||
|
|
||||||
proc cow(p: BProc; n: PNode) =
|
proc cowBracket(p: BProc; n: PNode) =
|
||||||
if n.kind == nkHiddenAddr and optSeqDestructors in p.config.globalOptions:
|
if n.kind == nkBracketExpr and optSeqDestructors in p.config.globalOptions:
|
||||||
if n[0].kind == nkBracketExpr:
|
let strCandidate = n[0]
|
||||||
let strCandidate = n[0][0]
|
if strCandidate.typ.skipTypes(abstractInst).kind == tyString:
|
||||||
if strCandidate.typ.skipTypes(abstractInst).kind == tyString:
|
var a: TLoc
|
||||||
var a: TLoc
|
initLocExpr(p, strCandidate, a)
|
||||||
initLocExpr(p, strCandidate, a)
|
linefmt(p, cpsStmts, "#nimPrepareStrMutationV2($1);$n", [byRefLoc(p, a)])
|
||||||
linefmt(p, cpsStmts, "#nimPrepareStrMutationV2($1);$n", [byRefLoc(p, a)])
|
|
||||||
|
proc cow(p: BProc; n: PNode) {.inline.} =
|
||||||
|
if n.kind == nkHiddenAddr: cowBracket(p, n[0])
|
||||||
|
|
||||||
proc genAddr(p: BProc, e: PNode, d: var TLoc) =
|
proc genAddr(p: BProc, e: PNode, d: var TLoc) =
|
||||||
# careful 'addr(myptrToArray)' needs to get the ampersand:
|
# careful 'addr(myptrToArray)' needs to get the ampersand:
|
||||||
|
|
@ -1759,6 +1761,8 @@ proc genSwap(p: BProc, e: PNode, d: var TLoc) =
|
||||||
# temp = a
|
# temp = a
|
||||||
# a = b
|
# a = b
|
||||||
# b = temp
|
# b = temp
|
||||||
|
cowBracket(p, e[1])
|
||||||
|
cowBracket(p, e[2])
|
||||||
var a, b, tmp: TLoc
|
var a, b, tmp: TLoc
|
||||||
getTemp(p, skipTypes(e[1].typ, abstractVar), tmp)
|
getTemp(p, skipTypes(e[1].typ, abstractVar), tmp)
|
||||||
initLocExpr(p, e[1], a) # eval a
|
initLocExpr(p, e[1], a) # eval a
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue