summary refs log tree commit diff stats
path: root/compiler/semexprs.nim
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2014-01-06 00:15:55 +0200
committerZahary Karadjov <zahary@gmail.com>2014-01-06 00:15:55 +0200
commit1ffae7cbafd63ed5d8546dcda1a0e5ec883fd00b (patch)
treec553bf1a94197b95a0fdf54b8cc2885c3b16a128 /compiler/semexprs.nim
parent789ba107cf3bcc1a87d896fc7cbfa11e151898c2 (diff)
downloadNim-1ffae7cbafd63ed5d8546dcda1a0e5ec883fd00b.tar.gz
progress towards fixing tgenericshardcases
Diffstat (limited to 'compiler/semexprs.nim')
-rw-r--r--compiler/semexprs.nim10
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 00c0e0f78..1f7803c95 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -231,7 +231,7 @@ proc semCast(c: PContext, n: PNode): PNode =
   if not isCastable(result.typ, result.sons[1].typ): 
     localError(result.info, errExprCannotBeCastedToX, 
                typeToString(result.typ))
-  
+
 proc semLowHigh(c: PContext, n: PNode, m: TMagic): PNode = 
   const 
     opToStr: array[mLow..mHigh, string] = ["low", "high"]
@@ -239,7 +239,7 @@ proc semLowHigh(c: PContext, n: PNode, m: TMagic): PNode =
     localError(n.info, errXExpectsTypeOrValue, opToStr[m])
   else: 
     n.sons[1] = semExprWithType(c, n.sons[1], {efDetermineType})
-    var typ = skipTypes(n.sons[1].typ, abstractVarRange)
+    var typ = skipTypes(n.sons[1].typ, abstractVarRange+{tyTypeDesc})
     case typ.kind
     of tySequence, tyString, tyOpenArray, tyVarargs: 
       n.typ = getSysType(tyInt)
@@ -249,8 +249,10 @@ proc semLowHigh(c: PContext, n: PNode, m: TMagic): PNode =
       # do not skip the range!
       n.typ = n.sons[1].typ.skipTypes(abstractVar)
     of tyGenericParam:
-      # leave it for now, it will be resolved in semtypinst
-      n.typ = getSysType(tyInt)
+      # prepare this for resolving in semtypinst:
+      # we must use copyTree here in order to avoid creating a cycle
+      # that could easily turn into an infinite recursion in semtypinst
+      n.typ = makeTypeFromExpr(c, n.copyTree)
     else:
       localError(n.info, errInvalidArgForX, opToStr[m])
   result = n