Class TailCallLoop

  • All Implemented Interfaces:
    ExportAgent, Locatable, IdentityComparable, Traceable

    public final class TailCallLoop
    extends UnaryExpression
    A TailCallLoop wraps the body of a function that contains tail-recursive function calls. On completion of the "real" body of the function it tests whether the function has executed a tail call, and if so, iterates to evaluate the tail call.
    • Constructor Detail

      • TailCallLoop

        public TailCallLoop​(UserFunction function,
                            Expression body)
        Constructor - create a TailCallLoop
        Parameters:
        function - the function in which this tail call loop appears
        body - the function body (before wrapping in the tail call loop)
    • Method Detail

      • getContainingFunction

        public UserFunction getContainingFunction()
        Get the containing function
        Returns:
        the containing function
      • typeCheck

        public Expression typeCheck​(ExpressionVisitor visitor,
                                    ContextItemStaticInfo contextInfo)
                             throws XPathException
        Type-check the expression
        Overrides:
        typeCheck in class UnaryExpression
        Parameters:
        visitor - an expression visitor
        contextInfo - Information available statically about the context item: whether it is (possibly) absent; its static type; its streaming posture.
        Returns:
        the original expression, rewritten to perform necessary run-time type checks, and to perform other type-related optimizations
        Throws:
        XPathException - if an error is discovered during this phase (typically a type error)
      • copy

        public Expression copy​(RebindingMap rebindings)
        Copy an expression. This makes a deep copy.
        Specified by:
        copy in class Expression
        Parameters:
        rebindings - Variables whose binding needs to change
        Returns:
        the copy of the original expression
      • iterate

        public SequenceIterator iterate​(XPathContext context)
                                 throws XPathException
        Iterate over the sequence of values
        Overrides:
        iterate in class Expression
        Parameters:
        context - supplies the context for evaluation
        Returns:
        a SequenceIterator that can be used to iterate over the result of the expression
        Throws:
        XPathException - if any dynamic error occurs evaluating the expression
      • evaluateItem

        public Item evaluateItem​(XPathContext context)
                          throws XPathException
        Evaluate as an Item.
        Overrides:
        evaluateItem in class Expression
        Parameters:
        context - The context in which the expression is to be evaluated
        Returns:
        the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
        Throws:
        XPathException - if any dynamic error occurs evaluating the expression
      • process

        public void process​(Outputter output,
                            XPathContext context)
                     throws XPathException
        Process the function body
        Overrides:
        process in class Expression
        Parameters:
        output - the destination for the result
        context - The dynamic context, giving access to the current node,
        Throws:
        XPathException - if a dynamic error occurs
      • getItemType

        public ItemType getItemType()
        Determine the data type of the items returned by the expression
        Overrides:
        getItemType in class UnaryExpression
        Returns:
        the item type of the items in the result sequence, insofar as this is known statically.
      • getExpressionName

        public java.lang.String getExpressionName()
        Give a string representation of the expression name for use in diagnostics
        Overrides:
        getExpressionName in class Expression
        Returns:
        the expression name, as a string