mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 02:12:11 +00:00
@@ -79,9 +79,19 @@ proc genBoundsCheck(p: BProc; arr, a, b: TLoc)
|
||||
proc openArrayLoc(p: BProc, n: PNode): Rope =
|
||||
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:
|
||||
# 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
|
||||
initLocExpr(p, q[1], a)
|
||||
initLocExpr(p, q[2], b)
|
||||
|
||||
@@ -2268,7 +2268,7 @@ proc genMagicExpr(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
|
||||
of mAccessEnv: unaryExpr(p, e, d, "$1.ClE_0")
|
||||
of mSlice:
|
||||
localError(p.config, e.info, "invalid context for 'toOpenArray'; " &
|
||||
" 'toOpenArray' is only valid within a call expression")
|
||||
"'toOpenArray' is only valid within a call expression")
|
||||
else:
|
||||
when defined(debugMagics):
|
||||
echo p.prc.name.s, " ", p.prc.id, " ", p.prc.flags, " ", p.prc.ast[genericParamsPos].kind
|
||||
|
||||
@@ -293,7 +293,7 @@ proc fitRemoveHiddenConv(c: PContext, typ: PType, n: PNode): PNode =
|
||||
result.info = n.info
|
||||
result.typ = 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:
|
||||
changeType(c, r1, typ, check=true)
|
||||
result = r1
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
discard """
|
||||
output: '''[1, 2, 3, 4]
|
||||
3
|
||||
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C']
|
||||
OK
|
||||
'''
|
||||
"""
|
||||
@@ -66,4 +67,18 @@ var
|
||||
doAssert y1 == ([1, 2], 3)
|
||||
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"
|
||||
|
||||
Reference in New Issue
Block a user