Skip to content

Commit 3fb45de

Browse files
committed
GR-26037: fix circular imports with bindings
1 parent 3cc95c2 commit 3fb45de

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/parser/sst/FactorySSTVisitor.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -984,11 +984,21 @@ public PNode visit(ImportSSTNode node) {
984984
} else {
985985
if (dotIndex != -1) {
986986
String[] parts = node.name.split("\\.");
987-
for (int i = 1; i < parts.length; i++) {
988-
importNode = nodeFactory.createGetAttribute(importNode, parts[i]);
987+
988+
String from = node.name.substring(0, node.name.lastIndexOf("."));
989+
int level = 0;
990+
while (from.length() > level && from.charAt(level) == '.') {
991+
level++;
992+
}
993+
if (level > 0) {
994+
from = from.substring(level);
989995
}
996+
997+
WriteNode readNode = (WriteNode) scopeEnvironment.findVariable(node.asName).makeWriteNode(EmptyNode.create());
998+
result = nodeFactory.createImportFrom(from, new String[]{parts[parts.length - 1]}, new WriteNode[]{readNode}, level);
999+
} else {
1000+
result = scopeEnvironment.findVariable(node.asName).makeWriteNode(importNode);
9901001
}
991-
result = scopeEnvironment.findVariable(node.asName).makeWriteNode(importNode);
9921002
}
9931003
result.assignSourceSection(createSourceSection(node.startOffset, node.endOffset));
9941004
return result;

0 commit comments

Comments
 (0)