summary refs log tree commit diff stats
path: root/compiler/importer.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-12-21 22:13:50 +0100
committerAndreas Rumpf <rumpf_a@web.de>2016-12-21 22:13:50 +0100
commit4e481cc316229436b87aaf035d70f686d0aaee5f (patch)
tree67c85a8fef0c5b0ebb7384712ad0a0bbf020aad4 /compiler/importer.nim
parent2bb49136de3e3d798c4bf37d23f34ee868e7ebf7 (diff)
downloadNim-4e481cc316229436b87aaf035d70f686d0aaee5f.tar.gz
implements module grouping for the import statement
Diffstat (limited to 'compiler/importer.nim')
-rw-r--r--compiler/importer.nim26
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