Beispiel #1
0
    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()
Beispiel #2
0
    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()
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
 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