diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-12-21 22:13:50 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-12-21 22:13:50 +0100 |
commit | 4e481cc316229436b87aaf035d70f686d0aaee5f (patch) | |
tree | 67c85a8fef0c5b0ebb7384712ad0a0bbf020aad4 /compiler/importer.nim | |
parent | 2bb49136de3e3d798c4bf37d23f34ee868e7ebf7 (diff) | |
download | Nim-4e481cc316229436b87aaf035d70f686d0aaee5f.tar.gz |
implements module grouping for the import statement
Diffstat (limited to 'compiler/importer.nim')
-rw-r--r-- | compiler/importer.nim | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/compiler/importer.nim b/compiler/importer.nim index feebf97c4..615d01693 100644 --- a/compiler/importer.nim +++ b/compiler/importer.nim @@ -186,16 +186,28 @@ proc myImportModule(c: PContext, n: PNode): PSym = message(n.info, warnDeprecated, result.name.s) #suggestSym(n.info, result, false) +proc impMod(c: PContext; it: PNode) = + let m = myImportModule(c, it) + if m != nil: + var emptySet: IntSet + # ``addDecl`` needs to be done before ``importAllSymbols``! + addDecl(c, m, it.info) # add symbol to symbol table of module + importAllSymbolsExcept(c, m, emptySet) + #importForwarded(c, m.ast, emptySet) + proc evalImport(c: PContext, n: PNode): PNode = result = n - var emptySet: IntSet for i in countup(0, sonsLen(n) - 1): - var m = myImportModule(c, n.sons[i]) - if m != nil: - # ``addDecl`` needs to be done before ``importAllSymbols``! - addDecl(c, m, n.info) # add symbol to symbol table of module - importAllSymbolsExcept(c, m, emptySet) - #importForwarded(c, m.ast, emptySet) + let it = n.sons[i] + if it.kind == nkInfix and it.len == 3 and it[2].kind == nkBracket: + let sep = renderTree(it.sons[0], {renderNoComments}) + let dir = renderTree(it.sons[1], {renderNoComments}) + for x in it[2]: + let f = renderTree(x, {renderNoComments}) + let a = newStrNode(nkStrLit, (dir & sep & f).replace(" ")) + impMod(c, a) + else: + impMod(c, it) proc evalFrom(c: PContext, n: PNode): PNode = result = n |