Bugfix: macros can be exported again

This commit is contained in:
Andreas Rumpf
2010-03-05 12:55:13 +01:00
parent a22d6b7e68
commit 13c69f5540
6 changed files with 26 additions and 26 deletions

View File

@@ -1,7 +1,7 @@
#
#
# Nimrod's Runtime Library
# (c) Copyright 2009 Andreas Rumpf
# (c) Copyright 2010 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.

View File

@@ -69,6 +69,17 @@ proc addDecl(c: PContext, sym: PSym) =
proc addDeclAt(c: PContext, sym: PSym, at: Natural) =
if SymTabAddUniqueAt(c.tab, sym, at) == Failure:
liMessage(sym.info, errAttemptToRedefine, sym.Name.s)
proc AddInterfaceDeclAux(c: PContext, sym: PSym) =
if (sfInInterface in sym.flags):
# add to interface:
if c.module == nil: InternalError(sym.info, "AddInterfaceDeclAux")
StrTableAdd(c.module.tab, sym)
if getCurrOwner().kind == skModule: incl(sym.flags, sfGlobal)
proc addInterfaceDeclAt*(c: PContext, sym: PSym, at: Natural) =
addDeclAt(c, sym, at)
AddInterfaceDeclAux(c, sym)
proc addOverloadableSymAt(c: PContext, fn: PSym, at: Natural) =
if not (fn.kind in OverloadableSyms):
@@ -77,13 +88,6 @@ proc addOverloadableSymAt(c: PContext, fn: PSym, at: Natural) =
if (check != nil) and not (check.Kind in OverloadableSyms):
liMessage(fn.info, errAttemptToRedefine, fn.Name.s)
SymTabAddAt(c.tab, fn, at)
proc AddInterfaceDeclAux(c: PContext, sym: PSym) =
if (sfInInterface in sym.flags):
# add to interface:
if c.module == nil: InternalError(sym.info, "AddInterfaceDeclAux")
StrTableAdd(c.module.tab, sym)
if getCurrOwner().kind == skModule: incl(sym.flags, sfGlobal)
proc addInterfaceDecl(c: PContext, sym: PSym) =
# it adds the symbol to the interface if appropriate
@@ -115,9 +119,6 @@ proc lookUp(c: PContext, n: PNode): PSym =
if result.kind == skStub: loadStub(result)
proc QualifiedLookUp(c: PContext, n: PNode, ambiguousCheck: bool): PSym =
var
m: PSym
ident: PIdent
case n.kind
of nkIdent:
result = SymtabGet(c.Tab, n.ident)
@@ -136,9 +137,9 @@ proc QualifiedLookUp(c: PContext, n: PNode, ambiguousCheck: bool): PSym =
liMessage(n.info, errUseQualifier, n.sym.name.s)
of nkDotExpr:
result = nil
m = qualifiedLookUp(c, n.sons[0], false)
var m = qualifiedLookUp(c, n.sons[0], false)
if (m != nil) and (m.kind == skModule):
ident = nil
var ident: PIdent = nil
if (n.sons[1].kind == nkIdent):
ident = n.sons[1].ident
elif (n.sons[1].kind == nkAccQuoted) and
@@ -236,4 +237,4 @@ proc nextOverloadIter(o: var TOverloadIter, c: PContext, n: PNode): PSym =
else:
result = nil
if (result != nil) and (result.kind == skStub): loadStub(result)

View File

@@ -1,7 +1,7 @@
#
#
# The Nimrod Compiler
# (c) Copyright 2009 Andreas Rumpf
# (c) Copyright 2010 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
@@ -675,7 +675,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
if kind in OverloadableSyms:
addInterfaceOverloadableSymAt(c, s, c.tab.tos - 2)
else:
addDeclAt(c, s, c.tab.tos - 2)
addInterfaceDeclAt(c, s, c.tab.tos - 2)
if n.sons[pragmasPos] != nil: pragma(c, s, n.sons[pragmasPos], validPragmas)
else:
if n.sons[pragmasPos] != nil:

View File

@@ -227,7 +227,8 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType =
if s.ast == nil: liMessage(n.info, errCannotInstantiateX, s.name.s)
result = instGenericContainer(c, n, result)
proc semIdentVis(c: PContext, kind: TSymKind, n: PNode, allowed: TSymFlags): PSym =
proc semIdentVis(c: PContext, kind: TSymKind, n: PNode,
allowed: TSymFlags): PSym =
# identifier with visibility
if n.kind == nkPostfix:
if (sonsLen(n) == 2) and (n.sons[0].kind == nkIdent):
@@ -252,14 +253,10 @@ proc semIdentWithPragma(c: PContext, kind: TSymKind, n: PNode,
case kind
of skType:
# process pragmas later, because result.typ has not been set yet
of skField:
pragma(c, result, n.sons[1], fieldPragmas)
of skVar:
pragma(c, result, n.sons[1], varPragmas)
of skConst:
pragma(c, result, n.sons[1], constPragmas)
else:
nil
of skField: pragma(c, result, n.sons[1], fieldPragmas)
of skVar: pragma(c, result, n.sons[1], varPragmas)
of skConst: pragma(c, result, n.sons[1], constPragmas)
else: nil
else:
result = semIdentVis(c, kind, n, allowed)
@@ -685,4 +682,4 @@ proc processMagicType(c: PContext, m: PSym) =
of mArray, mOpenArray, mRange, mSet, mSeq, mOrdinal:
return
else: liMessage(m.info, errTypeExpected)

View File

@@ -59,4 +59,5 @@ tstrutil.nim;ha/home/a1xyz/usr/bin
tvardecl.nim;44
tvarnums.nim;Success!
tvartup.nim;2 3
txmlgen.nim;<h1><a href="http://force7.de/nimrod">Nimrod</a></h1>
txmltree.nim;true
Can't render this file because it contains an unexpected character in line 57 and column 15.

View File

@@ -32,6 +32,7 @@ Additions
- Added ``system.cstringArrayToSeq``.
- Added ``system.lines(f: TFile)`` iterator.
- Added ``system.delete``, ``system.del`` and ``system.insert`` for sequences.
- Added ``system./`` for int.
- Exported ``system.newException`` template.
- Added ``cgi.decodeData(data: string): tuple[key, value: string]``.
- Added ``math.trunc``.