bugfix: GC marker procs; making tests green again

This commit is contained in:
Araq
2012-03-23 09:29:53 +01:00
parent 22c310485a
commit 5c33f76517
4 changed files with 10 additions and 4 deletions

View File

@@ -110,7 +110,11 @@ proc genTraverseProc(m: BModule, typ: PType, reason: TTypeInfoReason): PRope =
if typ.kind == tySequence:
genTraverseProcSeq(c, "a".toRope, typ)
else:
genTraverseProc(c, "(*a)".toRope, typ.sons[0])
if skipTypes(typ.sons[0], abstractInst).kind in {tyArrayConstr, tyArray}:
# C's arrays are broken beyond repair:
genTraverseProc(c, "a".toRope, typ.sons[0])
else:
genTraverseProc(c, "(*a)".toRope, typ.sons[0])
let generatedProc = ropef("$1 {$n$2$3$4}$n",
[header, p.s[cpsLocals], p.s[cpsInit], p.s[cpsStmts]])

View File

@@ -866,9 +866,11 @@ proc typeAllowedAux(marker: var TIntSet, typ: PType, kind: TSymKind): bool =
of tyArray:
result = t.sons[1].kind == tyEmpty or
typeAllowedAux(marker, t.sons[1], skVar)
of tyPtr, tyRef:
of tyRef:
if kind == skConst: return false
result = typeAllowedAux(marker, t.sons[0], skVar)
of tyPtr:
result = typeAllowedAux(marker, t.sons[0], skVar)
of tyArrayConstr, tyTuple, tySet, tyConst, tyMutable, tyIter, tyProxy:
for i in countup(0, sonsLen(t) - 1):
result = typeAllowedAux(marker, t.sons[i], kind)

View File

@@ -1,7 +1,7 @@
discard """
file: "t99bott.nim"
line: 26
errormsg: "cannot evaluate 'GetBottleNumber(bn)'"
errormsg: "constant expression expected"
disabled: false
"""
## 99 Bottles of Beer

View File

@@ -1,6 +1,6 @@
discard """
line: 7
errormsg: "a type has no value"
errormsg: "type mismatch"
"""
type a = enum b,c,d