From ca02dfab4801930ba44d08fc655fcbc6e3b11a21 Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 26 May 2013 01:19:19 +0200 Subject: [PATCH] implements #397 --- compiler/semtypes.nim | 11 ++++++++++- web/news.txt | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 13cf44426a..658b3507fa 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -182,7 +182,16 @@ proc semArray(c: PContext, n: PNode, prev: PType): PType = if sonsLen(n) == 3: # 3 = length(array indx base) if isRange(n[1]): indx = semRangeAux(c, n[1], nil) - else: indx = semTypeNode(c, n.sons[1], nil) + else: + let e = semExprWithType(c, n.sons[1], {efDetermineType}) + if e.kind in {nkIntLit..nkUInt64Lit}: + indx = newTypeS(tyRange, c) + indx.n = newNodeI(nkRange, n.info) + addSon(indx.n, newIntTypeNode(e.kind, 0, e.typ)) + addSon(indx.n, newIntTypeNode(e.kind, e.intVal-1, e.typ)) + addSonSkipIntLit(indx, e.typ) + else: + indx = e.typ.skipTypes({tyTypeDesc}) addSonSkipIntLit(result, indx) if indx.kind == tyGenericInst: indx = lastSon(indx) if indx.kind != tyGenericParam: diff --git a/web/news.txt b/web/news.txt index 0b707678ed..5d79d82711 100644 --- a/web/news.txt +++ b/web/news.txt @@ -26,6 +26,9 @@ Compiler Additions Language Additions ------------------ +- Arrays can now be declared with a single integer literal ``N`` instead of a + range; the range is then ``0..N-1``. + 2013-05-20 New website design!