parent
d0e5bd2305
commit
2a3b056314
4 changed files with 28 additions and 3 deletions
|
|
@ -79,9 +79,19 @@ proc genBoundsCheck(p: BProc; arr, a, b: TLoc)
|
||||||
proc openArrayLoc(p: BProc, n: PNode): Rope =
|
proc openArrayLoc(p: BProc, n: PNode): Rope =
|
||||||
var a: TLoc
|
var a: TLoc
|
||||||
|
|
||||||
let q = skipConv(n)
|
var q = skipConv(n)
|
||||||
|
var skipped = false
|
||||||
|
while q.kind == nkStmtListExpr and q.len > 0:
|
||||||
|
skipped = true
|
||||||
|
q = q.lastSon
|
||||||
if getMagic(q) == mSlice:
|
if getMagic(q) == mSlice:
|
||||||
# magic: pass slice to openArray:
|
# magic: pass slice to openArray:
|
||||||
|
if skipped:
|
||||||
|
q = skipConv(n)
|
||||||
|
while q.kind == nkStmtListExpr and q.len > 0:
|
||||||
|
for i in 0..q.len-2:
|
||||||
|
genStmts(p, q[i])
|
||||||
|
q = q.lastSon
|
||||||
var b, c: TLoc
|
var b, c: TLoc
|
||||||
initLocExpr(p, q[1], a)
|
initLocExpr(p, q[1], a)
|
||||||
initLocExpr(p, q[2], b)
|
initLocExpr(p, q[2], b)
|
||||||
|
|
|
||||||
|
|
@ -293,7 +293,7 @@ proc fitRemoveHiddenConv(c: PContext, typ: PType, n: PNode): PNode =
|
||||||
result.info = n.info
|
result.info = n.info
|
||||||
result.typ = typ
|
result.typ = typ
|
||||||
if not floatRangeCheck(result.floatVal, typ):
|
if not floatRangeCheck(result.floatVal, typ):
|
||||||
localError(c.config, n.info, errFloatToString % [$n.floatVal, typeToString(typ)])
|
localError(c.config, n.info, errFloatToString % [$result.floatVal, typeToString(typ)])
|
||||||
else:
|
else:
|
||||||
changeType(c, r1, typ, check=true)
|
changeType(c, r1, typ, check=true)
|
||||||
result = r1
|
result = r1
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
discard """
|
discard """
|
||||||
output: '''[1, 2, 3, 4]
|
output: '''[1, 2, 3, 4]
|
||||||
3
|
3
|
||||||
|
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C']
|
||||||
OK
|
OK
|
||||||
'''
|
'''
|
||||||
"""
|
"""
|
||||||
|
|
@ -66,4 +67,18 @@ var
|
||||||
doAssert y1 == ([1, 2], 3)
|
doAssert y1 == ([1, 2], 3)
|
||||||
doAssert y2 == [1, 2, 3, 4]
|
doAssert y2 == [1, 2, 3, 4]
|
||||||
|
|
||||||
|
template newOpenArray(x: var string, size: int): openArray[char] =
|
||||||
|
var z = 1
|
||||||
|
toOpenArray(x, z, size)
|
||||||
|
|
||||||
|
template doSomethingAndCreate(x: var string): openArray[char] =
|
||||||
|
let size = 12
|
||||||
|
newOpenArray(x, size)
|
||||||
|
|
||||||
|
proc sinkk(x: openArray[char]) =
|
||||||
|
echo x
|
||||||
|
|
||||||
|
var xArrayDeref = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
sinkk doSomethingAndCreate(xArrayDeref)
|
||||||
|
|
||||||
echo "OK"
|
echo "OK"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue