<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def visit_call(self, node, parent):
 """visit a CallFunc node by returning a fresh instance of it"""

        newnode = nodes.Call(node.lineno, node.col_offset, parent)
        starargs = _visit_or_none(node, "starargs", self, newnode)
        kwargs = _visit_or_none(node, "kwargs", self, newnode)
        args = [self.visit(child, newnode) for child in node.args]

        if node.keywords:
            keywords = [self.visit(child, newnode) for child in node.keywords]
        else:
            keywords = None
        if starargs:
            new_starargs = nodes.Starred(
                col_offset=starargs.col_offset,
                lineno=starargs.lineno,
                parent=starargs.parent,
            )
            new_starargs.postinit(value=starargs)
            args.append(new_starargs)
        if kwargs:
            new_kwargs = nodes.Keyword(
                arg=None,
                col_offset=kwargs.col_offset,
                lineno=kwargs.lineno,
                parent=kwargs.parent,
            )
            new_kwargs.postinit(value=kwargs)
            if keywords:
                keywords.append(new_kwargs)
            else:
                keywords = [new_kwargs]

        newnode.postinit(self.visit(node.func, newnode), args, keywords)
        return newnode