fix tgenericshardcases

This commit is contained in:
Zahary Karadjov 2017-03-24 14:18:50 +02:00
commit 7fdf29937d
2 changed files with 14 additions and 8 deletions

View file

@ -304,6 +304,7 @@ proc generateInstance(c: PContext, fn: PSym, pt: TIdTable,
pragma(c, result, n.sons[pragmasPos], allRoutinePragmas) pragma(c, result, n.sons[pragmasPos], allRoutinePragmas)
if isNil(n.sons[bodyPos]): if isNil(n.sons[bodyPos]):
n.sons[bodyPos] = copyTree(fn.getBody) n.sons[bodyPos] = copyTree(fn.getBody)
if c.inGenericContext == 0:
instantiateBody(c, n, fn.typ.n, result, fn) instantiateBody(c, n, fn.typ.n, result, fn)
sideEffectsCheck(c, result) sideEffectsCheck(c, result)
paramsTypeCheck(c, result.typ) paramsTypeCheck(c, result.typ)

View file

@ -185,6 +185,10 @@ proc semRangeAux(c: PContext, n: PNode, prev: PType): PType =
for i in 0..1: for i in 0..1:
rangeT[i] = range[i].typ.skipTypes({tyStatic}).skipIntLit rangeT[i] = range[i].typ.skipTypes({tyStatic}).skipIntLit
let hasUnknownTypes = c.inGenericContext > 0 and
rangeT[0].kind == tyFromExpr or rangeT[1].kind == tyFromExpr
if not hasUnknownTypes:
if not sameType(rangeT[0].skipTypes({tyRange}), rangeT[1].skipTypes({tyRange})): if not sameType(rangeT[0].skipTypes({tyRange}), rangeT[1].skipTypes({tyRange})):
localError(n.info, errPureTypeMismatch) localError(n.info, errPureTypeMismatch)
elif not rangeT[0].isOrdinalType: elif not rangeT[0].isOrdinalType:
@ -228,7 +232,8 @@ proc semRange(c: PContext, n: PNode, prev: PType): PType =
result = newOrPrevType(tyError, prev, c) result = newOrPrevType(tyError, prev, c)
proc semArrayIndex(c: PContext, n: PNode): PType = proc semArrayIndex(c: PContext, n: PNode): PType =
if isRange(n): result = semRangeAux(c, n, nil) if isRange(n):
result = semRangeAux(c, n, nil)
else: else:
let e = semExprWithType(c, n, {efDetermineType}) let e = semExprWithType(c, n, {efDetermineType})
if e.typ.kind == tyFromExpr: if e.typ.kind == tyFromExpr: