diff options
author | metagn <metagngn@gmail.com> | 2023-04-18 11:35:35 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-18 10:35:35 +0200 |
commit | 2f547afb0f2ca38d317d95cd9fc17fafc6b403df (patch) | |
tree | 880fea4753d64232bb5f1490fe1f99d929c40c10 | |
parent | 9dc1f2dd0f8dc08552338ca55e54a5305272d42d (diff) | |
download | Nim-2f547afb0f2ca38d317d95cd9fc17fafc6b403df.tar.gz |
import brackets support `as` and prefixes [backport] (#21636)
* import brackets support `as` and prefixes fixes #21635 * copyTree -> copyNode
-rw-r--r-- | compiler/importer.nim | 26 | ||||
-rw-r--r-- | tests/modules/timportas.nim | 11 |
2 files changed, 22 insertions, 15 deletions
diff --git a/compiler/importer.nim b/compiler/importer.nim index c4e37c269..84f4bb545 100644 --- a/compiler/importer.nim +++ b/compiler/importer.nim @@ -323,22 +323,24 @@ proc evalImport*(c: PContext, n: PNode): PNode = result = newNodeI(nkImportStmt, n.info) for i in 0..<n.len: let it = n[i] - if it.kind == nkInfix and it.len == 3 and it[2].kind == nkBracket: - let sep = it[0] - let dir = it[1] - 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]: + if it.kind in {nkInfix, nkPrefix} and it[^1].kind == nkBracket: + let lastPos = it.len - 1 + var imp = copyNode(it) + newSons(imp, it.len) + for i in 0 ..< lastPos: imp[i] = it[i] + imp[lastPos] = imp[0] # dummy entry, replaced in the loop + for x in it[lastPos]: # transform `a/b/[c as d]` to `/a/b/c as d` if x.kind == nkInfix and x[0].ident.s == "as": - let impAs = copyTree(x) - imp[2] = x[1] + var impAs = copyNode(x) + newSons(impAs, 3) + impAs[0] = x[0] + imp[lastPos] = x[1] impAs[1] = imp - impMod(c, imp, result) + impAs[2] = x[2] + impMod(c, impAs, result) else: - imp[2] = x + imp[lastPos] = x impMod(c, imp, result) else: impMod(c, it, result) diff --git a/tests/modules/timportas.nim b/tests/modules/timportas.nim index 2f7bf7f6a..179613c6b 100644 --- a/tests/modules/timportas.nim +++ b/tests/modules/timportas.nim @@ -2,15 +2,20 @@ discard """ action: run """ -import .. / modules / [definitions as foo] -import .. / modules / definitions as foo +import .. / modules / [mexporta as a1, definitions as foo1] +import .. / modules / definitions as foo2 +import ./[mexporta as a2, definitions as foo3] import std / times as bar from times as bar2 import nil import times as bar3 except convert import definitions as baz -discard foo.v +discard foo1.v +discard foo2.v +discard foo3.v discard bar.now() discard bar2.now() discard bar3.now() discard baz.v +discard a1.xyz +discard a2.xyz |