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
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