made some tests green; implemented 'from module import nil'

This commit is contained in:
Araq
2013-05-19 23:17:16 +02:00
parent 7b36d3d6ff
commit 1c9b4e5d33
16 changed files with 84 additions and 975 deletions

View File

@@ -86,7 +86,9 @@ proc GetUniqueType*(key: PType): PType =
if result == nil:
gCanonicalTypes[k] = key
result = key
of tyGenericParam, tyTypeClass, tyTypeDesc:
of tyTypeDesc, tyTypeClass:
InternalError("value expected, but got a type")
of tyGenericParam:
InternalError("GetUniqueType")
of tyGenericInst, tyDistinct, tyOrdinal, tyMutable, tyConst, tyIter:
result = GetUniqueType(lastSon(key))

View File

@@ -157,7 +157,9 @@ proc evalFrom(c: PContext, n: PNode): PNode =
var m = gImportModule(c.module, f)
n.sons[0] = newSymNode(m)
addDecl(c, m) # add symbol to symbol table of module
for i in countup(1, sonsLen(n) - 1): importSymbol(c, n.sons[i], m)
for i in countup(1, sonsLen(n) - 1):
if n.sons[i].kind != nkNilLit:
importSymbol(c, n.sons[i], m)
proc evalImportExcept*(c: PContext, n: PNode): PNode =
result = n

View File

@@ -40,7 +40,7 @@ proc semExprWithType(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
# do not produce another redundant error message:
#raiseRecoverableError("")
result = errorNode(c, n)
if result.typ == nil:
if result.typ == nil or result.typ == EnforceVoidContext:
# we cannot check for 'void' in macros ...
LocalError(n.info, errExprXHasNoType,
renderTree(result, {renderNoComments}))

View File

@@ -89,9 +89,11 @@ proc semDestructorCheck(c: PContext, n: PNode, flags: TExprFlags) {.inline.} =
if instantiateDestructor(c, n.typ):
LocalError(n.info, errGenerated,
"usage of a type with a destructor in a non destructible context")
if efDetermineType notin flags and n.typ.kind == tyTypeDesc and
c.p.owner.kind notin {skTemplate, skMacro}:
localError(n.info, errGenerated, "value expected, but got a type")
# This still breaks too many things:
when false:
if efDetermineType notin flags and n.typ.kind == tyTypeDesc and
c.p.owner.kind notin {skTemplate, skMacro}:
localError(n.info, errGenerated, "value expected, but got a type")
proc newDeref(n: PNode): PNode {.inline.} =
result = newNodeIT(nkHiddenDeref, n.info, n.typ.sons[0])