From 860a28802e1ee86c5b512d4ad0aacf419c17ed4f Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 31 Oct 2014 21:11:36 +0100 Subject: [PATCH] fixes #1595 --- compiler/semexprs.nim | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index f156470fe0..287a11b33b 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -1945,11 +1945,22 @@ proc semExport(c: PContext, n: PNode): PNode = if s == nil: localError(a.info, errGenerated, "invalid expr for 'export': " & renderTree(a)) - while s != nil: - if s.kind in ExportableSymKinds+{skModule}: - x.add(newSymNode(s, a.info)) - strTableAdd(c.module.tab, s) - s = nextOverloadIter(o, c, a) + elif s.kind == skModule: + # forward everything from that module: + strTableAdd(c.module.tab, s) + x.add(newSymNode(s, a.info)) + var ti: TTabIter + var it = initTabIter(ti, s.tab) + while it != nil: + if it.kind in ExportableSymKinds+{skModule}: + strTableAdd(c.module.tab, it) + it = nextIter(ti, s.tab) + else: + while s != nil: + if s.kind in ExportableSymKinds+{skModule}: + x.add(newSymNode(s, a.info)) + strTableAdd(c.module.tab, s) + s = nextOverloadIter(o, c, a) when false: if c.module.ast.isNil: c.module.ast = newNodeI(nkStmtList, n.info)