@@ -89,6 +89,7 @@ public void executeVoid(VirtualFrame frame) {
89
89
Object globals = PArguments .getGlobals (frame );
90
90
Object importedModule = importModule (frame , importee , globals , fromlist , level );
91
91
PythonObjectLibrary pol = ensurePythonLibrary ();
92
+ Object sysModules = getSysModules (frame , pol );
92
93
93
94
for (int i = 0 ; i < fromlist .length ; i ++) {
94
95
String attr = fromlist [i ];
@@ -100,17 +101,13 @@ public void executeVoid(VirtualFrame frame) {
100
101
Object moduleName = "<unknown module name>" ;
101
102
try {
102
103
moduleName = pol .lookupAttributeStrict (importedModule , frame , __NAME__ );
103
- String pkgname ;
104
104
try {
105
- pkgname = ensureCastToStringNode ().execute (moduleName );
106
- } catch (CannotCastException castException ){
105
+ String pkgname = ensureCastToStringNode ().execute (moduleName );
106
+ String fullname = PString .cat (pkgname , "." , attr );
107
+ writeNode .doWrite (frame , ensureGetItemNode ().execute (frame , sysModules , fullname ));
108
+ } catch (CannotCastException cce ){
107
109
throw pe ;
108
110
}
109
- String fullname = PString .cat (pkgname , "." , attr );
110
- PythonModule sys = getContext ().getCore ().lookupBuiltinModule ("sys" );
111
- Object sysModules = pol .lookupAttribute (sys , frame , "modules" );
112
- assert sysModules != PNone .NO_VALUE : "ImportFromNode: sys.modules was not found!" ;
113
- writeNode .doWrite (frame , ensureGetItemNode ().execute (frame , sysModules , fullname ));
114
111
} catch (PException pe2 ) {
115
112
Object modulePath = "unknown location" ;
116
113
if (!getAttrErrorProfile .profileException (pe2 , PythonBuiltinClassType .AttributeError )) {
@@ -131,6 +128,16 @@ public void executeVoid(VirtualFrame frame) {
131
128
}
132
129
}
133
130
131
+ private Object getSysModules (VirtualFrame frame , PythonObjectLibrary pol ) {
132
+ Object sysModules = getContext ().getSysModules ();
133
+ if (sysModules == null ) {
134
+ PythonModule sys = getContext ().getCore ().lookupBuiltinModule ("sys" );
135
+ sysModules = pol .lookupAttribute (sys , frame , "modules" );
136
+ }
137
+ assert sysModules != PNone .NO_VALUE : "ImportFromNode: sys.modules was not found!" ;
138
+ return sysModules ;
139
+ }
140
+
134
141
private static boolean isModuleInitialising (VirtualFrame frame , PythonObjectLibrary pol , Object importedModule ) {
135
142
Object spec = pol .lookupAttribute (importedModule , frame , __SPEC__ );
136
143
if (spec != PNone .NO_VALUE ) {
0 commit comments