@@ -232,40 +232,46 @@ def load_module(self, fqname, fp, pathname, (suffix, mode, type)):
232232 if co :
233233 m .__file__ = pathname
234234 m .__code__ = co
235- code = co .co_code
236- n = len (code )
237- i = 0
238- lastname = None
239- while i < n :
240- c = code [i ]
241- i = i + 1
242- op = ord (c )
243- if op >= dis .HAVE_ARGUMENT :
244- oparg = ord (code [i ]) + ord (code [i + 1 ])* 256
245- i = i + 2
246- if op == IMPORT_NAME :
247- name = lastname = co .co_names [oparg ]
248- if not self .badmodules .has_key (lastname ):
249- try :
250- self .import_hook (name , m )
251- except ImportError , msg :
252- self .msg (2 , "ImportError:" , str (msg ))
253- self .badmodules [name ] = None
254- elif op == IMPORT_FROM :
255- name = co .co_names [oparg ]
256- assert lastname is not None
257- if not self .badmodules .has_key (lastname ):
258- try :
259- self .import_hook (lastname , m , [name ])
260- except ImportError , msg :
261- self .msg (2 , "ImportError:" , str (msg ))
262- fullname = lastname + "." + name
263- self .badmodules [fullname ] = None
264- else :
265- lastname = None
235+ self .scan_code (co , m )
266236 self .msgout (2 , "load_module ->" , m )
267237 return m
268238
239+ def scan_code (self , co , m ):
240+ code = co .co_code
241+ n = len (code )
242+ i = 0
243+ lastname = None
244+ while i < n :
245+ c = code [i ]
246+ i = i + 1
247+ op = ord (c )
248+ if op >= dis .HAVE_ARGUMENT :
249+ oparg = ord (code [i ]) + ord (code [i + 1 ])* 256
250+ i = i + 2
251+ if op == IMPORT_NAME :
252+ name = lastname = co .co_names [oparg ]
253+ if not self .badmodules .has_key (lastname ):
254+ try :
255+ self .import_hook (name , m )
256+ except ImportError , msg :
257+ self .msg (2 , "ImportError:" , str (msg ))
258+ self .badmodules [name ] = None
259+ elif op == IMPORT_FROM :
260+ name = co .co_names [oparg ]
261+ assert lastname is not None
262+ if not self .badmodules .has_key (lastname ):
263+ try :
264+ self .import_hook (lastname , m , [name ])
265+ except ImportError , msg :
266+ self .msg (2 , "ImportError:" , str (msg ))
267+ fullname = lastname + "." + name
268+ self .badmodules [fullname ] = None
269+ else :
270+ lastname = None
271+ for c in co .co_consts :
272+ if isinstance (c , type (co )):
273+ self .scan_code (c , m )
274+
269275 def load_package (self , fqname , pathname ):
270276 self .msgin (2 , "load_package" , fqname , pathname )
271277 m = self .add_module (fqname )
0 commit comments