diff options
author | Zahary Karadjov <zahary@gmail.com> | 2014-01-06 00:15:55 +0200 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2014-01-06 00:15:55 +0200 |
commit | 1ffae7cbafd63ed5d8546dcda1a0e5ec883fd00b (patch) | |
tree | c553bf1a94197b95a0fdf54b8cc2885c3b16a128 /compiler/semexprs.nim | |
parent | 789ba107cf3bcc1a87d896fc7cbfa11e151898c2 (diff) | |
download | Nim-1ffae7cbafd63ed5d8546dcda1a0e5ec883fd00b.tar.gz |
progress towards fixing tgenericshardcases
Diffstat (limited to 'compiler/semexprs.nim')
-rw-r--r-- | compiler/semexprs.nim | 10 |
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 |