def visit_FunctionDef(self, node): self.curr_locals_declaration = self.passmanager.gather( LocalDeclarations, node) self.current = node self.typedefs = list() self.name_to_nodes = {arg.id: {arg} for arg in node.args.args} self.yield_points = self.passmanager.gather(YieldPoints, node) # two stages, one for inter procedural propagation self.stage = 0 self.generic_visit(node) # and one for backward propagation # but this step is generally costly if cfg.getboolean('typing', 'enable_two_steps_typing'): self.stage = 1 self.generic_visit(node) # propagate type information through all aliases for name, nodes in self.name_to_nodes.iteritems(): final_node = ast.Name("__fake__" + name, ast.Load()) for n in nodes: self.combine(final_node, n) for n in nodes: self.result[n] = self.result[final_node] self.current_global_declarations[node.name] = node # return type may be unset if the function always raises return_type = self.result.get(node, NamedType("void")) self.result[node] = (Assignable(return_type), self.typedefs) for k in self.passmanager.gather(LocalDeclarations, node): self.result[k] = self.get_qualifier(k)(self.result[k])
def visit_FunctionDef(self, node): self.current = node self.typedefs = list() self.name_to_nodes = {arg.id: {arg} for arg in node.args.args} self.yield_points = self.passmanager.gather(YieldPoints, node) # two stages, one for inter procedural propagation self.stage = 0 self.generic_visit(node) # and one for backward propagation # but this step is generally costly if cfg.getboolean('typing', 'enable_two_steps_typing'): self.stage = 1 self.generic_visit(node) # propagate type information through all aliases for name, nodes in self.name_to_nodes.iteritems(): final_node = ast.Name("__fake__" + name, ast.Load()) for n in nodes: self.combine(final_node, n) for n in nodes: self.result[n] = self.result[final_node] self.current_global_declarations[node.name] = node # return type may be unset if the function always raises return_type = self.result.get(node, NamedType("void")) self.result[node] = (Assignable(return_type), self.typedefs) for k in self.passmanager.gather(LocalDeclarations, node): lazy_res = self.lazyness_analysis[k.id] if lazy_res <= self.max_recompute: self.result[k] = Lazy(self.result[k]) else: self.result[k] = Assignable(self.result[k])
def dispose(self, minfo, cachefp, starttime): """ Dispose the log in one or more format below mlog - for debugging, save if the mlog config is set qlog - queuing for indexing, save if minfo.discard is not set """ mlogFlag = cfg.getboolean('messagelog', 'mlog', False) if not minfo.discard or mlogFlag: minfo.id = self.getId() if not minfo.discard: cachefp.write_qlog(minfo.id) if mlogFlag: cachefp.write_mlog(minfo.id) elapsed = datetime.datetime.now() - starttime log.debug('%3d.%02ds %s' % (elapsed.seconds, elapsed.microseconds/10000, minfo.logmsg()))