summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorOscar NihlgÄrd <oscarnihlgard@gmail.com>2018-08-23 10:23:02 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-08-23 10:23:02 +0200
commitd6d3f092a369ae24ab4f51a332a8056e18c215b0 (patch)
tree21b6b34249eefc397dd5b84230974e12720c0fe9 /compiler
parentbf973d29da48fc6e6d6eeedce3adda84e0b45a64 (diff)
downloadNim-d6d3f092a369ae24ab4f51a332a8056e18c215b0.tar.gz
Fix for module alias inside brackets (#8726)
Diffstat (limited to 'compiler')
-rw-r--r--compiler/importer.nim26
-rw-r--r--compiler/modulepaths.nim7
2 files changed, 19 insertions, 14 deletions
diff --git a/compiler/importer.nim b/compiler/importer.nim
index c013b93ab..acc3d26d2 100644
--- a/compiler/importer.nim
+++ b/compiler/importer.nim
@@ -174,20 +174,32 @@ proc impMod(c: PContext; it: PNode; importStmtResult: PNode) =
     #importForwarded(c, m.ast, emptySet)
 
 proc evalImport(c: PContext, n: PNode): PNode =
-  #result = n
   result = newNodeI(nkImportStmt, n.info)
   for i in countup(0, sonsLen(n) - 1):
     let it = n.sons[i]
     if it.kind == nkInfix and it.len == 3 and it[2].kind == nkBracket:
       let sep = it[0]
       let dir = it[1]
-      let a = newNodeI(nkInfix, it.info)
-      a.add sep
-      a.add dir
-      a.add sep # dummy entry, replaced in the loop
+      var imp = newNodeI(nkInfix, it.info)
+      imp.add sep
+      imp.add dir
+      imp.add sep # dummy entry, replaced in the loop
       for x in it[2]:
-        a.sons[2] = x
-        impMod(c, a, result)
+        if x.kind == nkInfix and x.sons[0].ident.s == "as":
+          imp.sons[2] = x.sons[1]
+          let impAs = newNodeI(nkImportAs, it.info)
+          impAs.add imp
+          impAs.add x.sons[2]
+          imp = impAs
+          impMod(c, imp, result)
+        else:
+          imp.sons[2] = x
+          impMod(c, imp, result)
+    elif it.kind == nkInfix and it.sons[0].ident.s == "as":
+      let imp = newNodeI(nkImportAs, it.info)
+      imp.add it.sons[1]
+      imp.add it.sons[2]
+      impMod(c, imp, result)
     else:
       impMod(c, it, result)
 
diff --git a/compiler/modulepaths.nim b/compiler/modulepaths.nim
index e5cbf3a2c..118002fcf 100644
--- a/compiler/modulepaths.nim
+++ b/compiler/modulepaths.nim
@@ -126,13 +126,6 @@ proc getModuleName*(conf: ConfigRef; n: PNode): string =
   of nkInfix:
     let n0 = n[0]
     let n1 = n[1]
-    if n0.kind == nkIdent and n0.ident.s == "as":
-      # XXX hack ahead:
-      n.kind = nkImportAs
-      n.sons[0] = n.sons[1]
-      n.sons[1] = n.sons[2]
-      n.sons.setLen(2)
-      return getModuleName(conf, n.sons[0])
     when false:
       if n1.kind == nkPrefix and n1[0].kind == nkIdent and n1[0].ident.s == "$":
         if n0.kind == nkIdent and n0.ident.s == "/":