diff options
author | LemonBoy <LemonBoy@users.noreply.github.com> | 2018-10-10 21:03:18 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-10-10 21:03:18 +0200 |
commit | 0ead36dae6ab0d4525d2318d19335147ffa0bd3d (patch) | |
tree | f5aae1163acc3da37ac0341c6e2fd8bc013de259 /compiler/ccgexprs.nim | |
parent | 0803b532f44fc7b0039e31187af76e36828ca89d (diff) | |
download | Nim-0ead36dae6ab0d4525d2318d19335147ffa0bd3d.tar.gz |
Unchecked arrays now have their own type (#9267)
Diffstat (limited to 'compiler/ccgexprs.nim')
-rw-r--r-- | compiler/ccgexprs.nim | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index b9a2a052e..68cfa8b50 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -856,6 +856,15 @@ proc genCheckedRecordField(p: BProc, e: PNode, d: var TLoc) = else: genRecordField(p, e.sons[0], d) +proc genUncheckedArrayElem(p: BProc, n, x, y: PNode, d: var TLoc) = + var a, b: TLoc + initLocExpr(p, x, a) + initLocExpr(p, y, b) + var ty = skipTypes(a.t, abstractVarRange + abstractPtrs + tyUserTypeClasses) + d.inheritLocation(a) + putIntoDest(p, d, n, ropecg(p.module, "$1[$2]", rdLoc(a), rdCharLoc(b)), + a.storage) + proc genArrayElem(p: BProc, n, x, y: PNode, d: var TLoc) = var a, b: TLoc initLocExpr(p, x, a) @@ -949,6 +958,7 @@ proc genBracketExpr(p: BProc; n: PNode; d: var TLoc) = var ty = skipTypes(n.sons[0].typ, abstractVarRange + tyUserTypeClasses) if ty.kind in {tyRef, tyPtr}: ty = skipTypes(ty.lastSon, abstractVarRange) case ty.kind + of tyUncheckedArray: genUncheckedArrayElem(p, n, n.sons[0], n.sons[1], d) of tyArray: genArrayElem(p, n, n.sons[0], n.sons[1], d) of tyOpenArray, tyVarargs: genOpenArrayElem(p, n, n.sons[0], n.sons[1], d) of tySequence, tyString: genSeqElem(p, n, n.sons[0], n.sons[1], d) |