* fixes #12042

* make tests green again
This commit is contained in:
Andreas Rumpf
2019-08-29 19:09:54 +02:00
committed by GitHub
parent d0e5bd2305
commit 2a3b056314
4 changed files with 28 additions and 3 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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"