mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-08 21:04:20 +00:00
fixes #1063
This commit is contained in:
@@ -225,8 +225,18 @@ proc semArray(c: PContext, n: PNode, prev: PType): PType =
|
||||
# properly filled-out in semtypinst (see how tyStaticExpr
|
||||
# is handled there).
|
||||
indx = makeRangeWithStaticExpr(c, e)
|
||||
else:
|
||||
elif e.kind == nkIdent:
|
||||
indx = e.typ.skipTypes({tyTypeDesc})
|
||||
else:
|
||||
let x = semConstExpr(c, e)
|
||||
if x.kind in {nkIntLit..nkUInt64Lit}:
|
||||
indx = makeRangeType(c, 0, x.intVal-1, n.info,
|
||||
x.typ.skipTypes({tyTypeDesc}))
|
||||
else:
|
||||
indx = x.typ.skipTypes({tyTypeDesc})
|
||||
if not isOrdinalType(indx):
|
||||
localError(n[1].info, errOrdinalTypeExpected)
|
||||
#localError(n[1].info, errConstExprExpected)
|
||||
addSonSkipIntLit(result, indx)
|
||||
if indx.kind == tyGenericInst: indx = lastSon(indx)
|
||||
if indx.kind notin {tyGenericParam, tyStatic, tyFromExpr}:
|
||||
|
||||
@@ -1501,7 +1501,7 @@ proc gen(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags = {}) =
|
||||
else:
|
||||
localError(n.info, errGenerated, "VM is not allowed to 'cast'")
|
||||
else:
|
||||
internalError n.info, "too implement " & $n.kind
|
||||
internalError n.info, "cannot generate VM code for " & n.renderTree
|
||||
|
||||
proc removeLastEof(c: PCtx) =
|
||||
let last = c.code.len-1
|
||||
|
||||
23
tests/vm/tarrayboundeval.nim
Normal file
23
tests/vm/tarrayboundeval.nim
Normal file
@@ -0,0 +1,23 @@
|
||||
discard """
|
||||
output: '''7
|
||||
8 8'''
|
||||
"""
|
||||
|
||||
#bug 1063
|
||||
|
||||
const
|
||||
KeyMax = 227
|
||||
myconst = int((KeyMax + 31) / 32)
|
||||
|
||||
type
|
||||
FU = array[int((KeyMax + 31) / 32), cuint]
|
||||
|
||||
echo FU.high
|
||||
|
||||
type
|
||||
PKeyboard* = ptr object
|
||||
TKeyboardState* = object
|
||||
display*: pointer
|
||||
internal: array[int((KeyMax + 31)/32), cuint]
|
||||
|
||||
echo myconst, " ", int((KeyMax + 31) / 32)
|
||||
Reference in New Issue
Block a user