Revert "more test made green"

This reverts commit 911e6e710f.
This commit is contained in:
Araq 2013-05-27 23:16:56 +02:00
commit c67abd7e61
6 changed files with 89 additions and 96 deletions

View file

@ -1285,8 +1285,7 @@ proc getStrOrChar*(a: PNode): string =
proc isGenericRoutine*(s: PSym): bool =
case s.kind
of skProc, skTemplate, skMacro, skIterator, skMethod, skConverter:
result = sfFromGeneric in s.flags or
(s.ast != nil and s.ast[genericParamsPos].kind != nkEmpty)
result = sfFromGeneric in s.flags
else: nil
proc isRoutine*(s: PSym): bool {.inline.} =

View file

@ -220,7 +220,7 @@ proc getHiddenParam(routine: PSym): PSym =
proc isInnerProc(s, outerProc: PSym): bool {.inline.} =
result = s.kind in {skProc, skMethod, skConverter} and
s.owner == outerProc
s.owner == outerProc and not isGenericRoutine(s)
#s.typ.callConv == ccClosure
proc addClosureParam(i: PInnerContext, e: PEnv) =

View file

@ -91,8 +91,17 @@ proc instantiateBody(c: PContext, n: PNode, result: PSym) =
addDecl(c, result)
pushProcCon(c, result)
# add params to scope
for i in 1 .. <result.typ.n.len:
var param = result.typ.n.sons[i].sym
let origFormalParams = result.typ.n
result.typ.n = newNodeI(nkFormalParams,
origFormalParams.info,
origFormalParams.len)
result.typ.n.sons[0] = copyNode(origFormalParams.sons[0])
for i in 1 .. <result.typ.len:
let origParam = origFormalParams[i].sym
var param = copySym(origParam)
result.typ.n.sons[i] = newSymNode(param)
param.typ = result.typ.sons[i]
param.ast = origParam.ast
param.owner = result
addParamOrResult(c, param, result.kind)
# debug result.typ.n
@ -141,15 +150,6 @@ proc instGenericContainer(c: PContext, n: PNode, header: PType): PType =
proc fixupProcType(c: PContext, genericType: PType,
inst: TInstantiation): PType =
# XXX: This is starting to look suspiciously like ReplaceTypeVarsT
# there are few apparent differences, but maybe the code could be
# moved over.
# * the code here uses the new genericSym.position property when
# doing lookups.
# * the handling of tyTypeDesc seems suspicious in ReplaceTypeVarsT
# typedesc params were previously handled in the second pass of
# semParamList
# * void (nkEmpty) params doesn't seem to be stripped in ReplaceTypeVarsT
result = genericType
if result == nil: return
@ -167,8 +167,7 @@ proc fixupProcType(c: PContext, genericType: PType,
if genericType.sons == nil: return
var head = 0
for i in 0 .. <genericType.sons.len:
let origType = genericType.sons[i]
var changed = fixupProcType(c, origType, inst)
var changed = fixupProcType(c, genericType.sons[i], inst)
if changed != genericType.sons[i]:
var changed = changed.skipIntLit
if result == genericType:
@ -195,11 +194,7 @@ proc fixupProcType(c: PContext, genericType: PType,
if result.n != nil:
if result.n.kind == nkRecList:
for son in result.n.sons:
if son.typ == origType:
son.typ = changed
son.sym = copySym(son.sym, true)
son.sym.typ = changed
result.n.sons[head].typ = changed
if result.n.kind == nkFormalParams:
if i != 0:
let origParam = result.n.sons[head].sym
@ -210,14 +205,14 @@ proc fixupProcType(c: PContext, genericType: PType,
# won't be advanced on empty (void) nodes
inc head
of tyGenericInvokation:
result = newTypeWithSons(c, tyGenericInvokation, genericType.sons)
for i in 1 .. <genericType.sons.len:
result.sons[i] = fixupProcType(c, result.sons[i], inst)
result = instGenericContainer(c, getInfoContext(-1), result)
else: nil
else:
nil
proc generateInstance(c: PContext, fn: PSym, pt: TIdTable,
info: TLineInfo): PSym =

View file

@ -374,7 +374,7 @@ proc semCaseBranch(c: PContext, t, branch: PNode, branchIndex: int,
# for ``{}`` we want to trigger the type mismatch in ``fitNode``:
if r.kind != nkCurly or len(r) == 0:
checkMinSonsLen(t, 1)
branch.sons[i] = skipConv(fitNode(c, t.sons[0].typ, r))
branch.sons[i] = fitNode(c, t.sons[0].typ, r)
inc(covered)
else:
# constant sets have special rules