def visit_overloaded_func_def(self, func: OverloadedFuncDef) -> None: if self.sem.type is not None: # Don't process methods during pass 1. return kind = self.kind_by_scope() if kind == GDEF: self.sem.check_no_global(func.name(), func, True) func._fullname = self.sem.qualified_name(func.name()) if kind == GDEF: self.sem.globals[func.name()] = SymbolTableNode(kind, func) if func.impl: impl = func.impl # Also analyze the function body (in case there are conditional imports). sem = self.sem if isinstance(impl, FuncDef): sem.function_stack.append(impl) sem.scope.enter_function(func) sem.enter() impl.body.accept(self) elif isinstance(impl, Decorator): sem.function_stack.append(impl.func) sem.scope.enter_function(func) sem.enter() impl.func.body.accept(self) else: assert False, "Implementation of an overload needs to be FuncDef or Decorator" sem.leave() sem.scope.leave() sem.function_stack.pop()
def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> Node: items = [self.visit_decorator(decorator) for decorator in node.items] for newitem, olditem in zip(items, node.items): newitem.line = olditem.line new = OverloadedFuncDef(items) new._fullname = node._fullname new.type = self.type(node.type) new.info = node.info return new
def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> OverloadedFuncDef: items = [cast(OverloadPart, item.accept(self)) for item in node.items] for newitem, olditem in zip(items, node.items): newitem.line = olditem.line new = OverloadedFuncDef(items) new._fullname = node._fullname new.type = self.optional_type(node.type) new.info = node.info if node.impl: new.impl = cast(OverloadPart, node.impl.accept(self)) return new
def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> OverloadedFuncDef: items = [cast(OverloadPart, item.accept(self)) for item in node.items] for newitem, olditem in zip(items, node.items): newitem.line = olditem.line new = OverloadedFuncDef(items) new._fullname = node._fullname new.type = self.optional_type(node.type) new.info = node.info new.is_static = node.is_static new.is_class = node.is_class new.is_property = node.is_property new.is_final = node.is_final if node.impl: new.impl = cast(OverloadPart, node.impl.accept(self)) return new
def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> OverloadedFuncDef: items = [cast(OverloadPart, item.accept(self)) for item in node.items] for newitem, olditem in zip(items, node.items): newitem.line = olditem.line new = OverloadedFuncDef(items) new._fullname = node._fullname new_type = self.optional_type(node.type) assert isinstance(new_type, ProperType) new.type = new_type new.info = node.info new.is_static = node.is_static new.is_class = node.is_class new.is_property = node.is_property new.is_final = node.is_final if node.impl: new.impl = cast(OverloadPart, node.impl.accept(self)) return new