예제 #1
0
 def _unpickle_module(self, module):
   if not module.pickle:
     return
   todo = [module]
   seen = set()
   newly_loaded_asts = []
   while todo:
     m = todo.pop()
     if m in seen:
       continue
     else:
       seen.add(m)
     if not m.pickle:
       continue
     loaded_ast = cPickle.loads(m.pickle)
     deps = [d for d, _ in loaded_ast.dependencies if d != loaded_ast.ast.name]
     loaded_ast = serialize_ast.EnsureAstName(loaded_ast, m.module_name)
     assert m.module_name in self._modules
     todo.extend(self._modules[dependency] for dependency in deps)
     newly_loaded_asts.append(loaded_ast)
     m.ast = loaded_ast.ast
     m.pickle = None
   module_map = self._get_module_map()
   for loaded_ast in newly_loaded_asts:
     unused_new_serialize_ast = serialize_ast.FillLocalReferences(
         loaded_ast, module_map)
   assert module.ast
예제 #2
0
 def _unpickle_module(self, module):
     """Unpickle a pickled ast and its dependencies."""
     if not module.pickle:
         return
     todo = [module]
     seen = set()
     newly_loaded_asts = []
     while todo:
         m = todo.pop()
         if m in seen:
             continue
         else:
             seen.add(m)
         if not m.pickle:
             continue
         loaded_ast = pickle.loads(m.pickle)
         deps = [
             d for d, _ in loaded_ast.dependencies
             if d != loaded_ast.ast.name
         ]
         loaded_ast = serialize_ast.EnsureAstName(loaded_ast, m.module_name)
         assert m.module_name in self._modules
         for dependency in deps:
             module_prefix = dependency
             while module_prefix == dependency or "." in module_prefix:
                 if module_prefix in self._modules:
                     break
                 module_prefix, _, _ = module_prefix.rpartition(".")
             else:
                 raise KeyError(f"Module not found: {dependency}")
             todo.append(self._modules[module_prefix])
         newly_loaded_asts.append(loaded_ast)
         m.ast = loaded_ast.ast
         m.pickle = None
     module_map = self.get_module_map()
     for loaded_ast in newly_loaded_asts:
         serialize_ast.FillLocalReferences(loaded_ast, module_map)
     assert module.ast