summary refs log tree commit diff stats
path: root/compiler/semfold.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-04-03 07:54:58 +0200
committerAraq <rumpf_a@web.de>2014-04-03 07:54:58 +0200
commit62a10df76560d2361955e1072b4b0e1b2a62e477 (patch)
tree9a581742bcc14ce16feaa2d79bbe82276742c9e9 /compiler/semfold.nim
parente4e87f1cb2fe01a4462f7b0e3d347389f173beff (diff)
downloadNim-62a10df76560d2361955e1072b4b0e1b2a62e477.tar.gz
fixes yet another option type
Diffstat (limited to 'compiler/semfold.nim')
-rw-r--r--compiler/semfold.nim18
1 files changed, 12 insertions, 6 deletions
diff --git a/compiler/semfold.nim b/compiler/semfold.nim
index 925a80832..caaab2291 100644
--- a/compiler/semfold.nim
+++ b/compiler/semfold.nim
@@ -113,12 +113,18 @@ proc pickMaxInt(n: PNode): BiggestInt =
     internalError(n.info, "pickMaxInt")
 
 proc makeRange(typ: PType, first, last: BiggestInt): PType = 
-  var n = newNode(nkRange)
-  addSon(n, newIntNode(nkIntLit, min(first, last)))
-  addSon(n, newIntNode(nkIntLit, max(first, last)))
-  result = newType(tyRange, typ.owner)
-  result.n = n
-  addSonSkipIntLit(result, skipTypes(typ, {tyRange}))
+  let minA = min(first, last)
+  let maxA = max(first, last)
+  let lowerNode = newIntNode(nkIntLit, minA)
+  if typ.kind == tyInt and minA == maxA:
+    result = getIntLitType(lowerNode)
+  else:
+    var n = newNode(nkRange)
+    addSon(n, lowerNode)
+    addSon(n, newIntNode(nkIntLit, maxA))
+    result = newType(tyRange, typ.owner)
+    result.n = n
+    addSonSkipIntLit(result, skipTypes(typ, {tyRange}))
 
 proc makeRangeF(typ: PType, first, last: BiggestFloat): PType =
   var n = newNode(nkRange)