def METHOD_NAME(self):
    """
    Return a clone ("deep copy") of this node.
    :return: new AST node instance
    :rtype: ASTFunction
    """
    block_dup = None
    if self.block:
        block_dup = self.block.METHOD_NAME()
    return_type_dup = None
    if self.return_type:
        return_type_dup = self.return_type.METHOD_NAME()
    parameters_dup = None
    parameters_dup = [parameter.METHOD_NAME() for parameter in self.parameters]
    dup = ASTFunction(name=self.name,
                      parameters=parameters_dup,
                      return_type=return_type_dup,
                      block=block_dup,
                      type_symbol=self.type_symbol,
                      # ASTNode common attributes:
                      source_position=self.source_position,
                      scope=self.scope,
                      comment=self.comment,
                      pre_comments=[s for s in self.pre_comments],
                      in_comment=self.in_comment,
                      implicit_conversion_factor=self.implicit_conversion_factor)
    return dup