net.sf.saxon.expr

Class TailCallLoop

Implemented Interfaces:
EvaluableItem, InstructionInfoProvider, SequenceIterable, Serializable, SourceLocator

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.

Field Summary

Fields inherited from class net.sf.saxon.expr.UnaryExpression

operand

Fields inherited from class net.sf.saxon.expr.Expression

EVALUATE_METHOD, ITERATE_METHOD, PROCESS_METHOD, locationId, staticProperties

Constructor Summary

TailCallLoop(UserFunction function)
Constructor - create a TailCallLoop

Method Summary

Expression
copy()
Copy an expression.
protected String
displayExpressionName()
Give a string representation of the expression name for use in diagnostics
Item
evaluateItem(XPathContext context)
Evaluate as an Item.
UserFunction
getContainingFunction()
Get the containing function
int
getImplementationMethod()
An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process().
ItemType
getItemType(TypeHierarchy th)
Determine the data type of the items returned by the expression
SequenceIterator
iterate(XPathContext context)
Iterate over the sequence of values
void
process(XPathContext context)
Process the function body
Expression
typeCheck(ExpressionVisitor visitor, ItemType contextItemType)
Type-check the expression

Methods inherited from class net.sf.saxon.expr.UnaryExpression

computeCardinality, computeSpecialProperties, displayExpressionName, displayOperator, equals, explain, getBaseExpression, getItemType, hashCode, iterateSubExpressions, optimize, promote, replaceSubExpression, simplify, toString, typeCheck

Methods inherited from class net.sf.saxon.expr.Expression

addToPathMap, adoptChildExpression, checkPermittedContents, computeCardinality, computeDependencies, computeSpecialProperties, computeStaticProperties, copy, display, doPromotion, dynamicError, effectiveBooleanValue, evaluateAsString, evaluateItem, explain, explain, findParentOf, getCardinality, getColumnNumber, getConstructType, getContainer, getDependencies, getExecutable, getHostLanguage, getImplementationMethod, getInstructionInfo, getIntrinsicDependencies, getItemType, getLineNumber, getLocationId, getLocationProvider, getPublicId, getSlotsUsed, getSpecialProperties, getSystemId, hasLoopingSubexpression, implementsStaticTypeCheck, iterate, iterateEvents, iterateSubExpressions, markTailFunctionCalls, optimize, process, promote, replaceSubExpression, resetLocalStaticProperties, setContainer, setFiltered, setFlattened, setLocationId, simplify, staticTypeCheck, suppressValidation, toString, typeCheck, typeError

Constructor Details

TailCallLoop

public TailCallLoop(UserFunction function)
Constructor - create a TailCallLoop
Parameters:
function - the function in which this tail call loop appears

Method Details

copy

public Expression copy()
Copy an expression. This makes a deep copy.
Overrides:
copy in interface Expression
Returns:
the copy of the original expression

displayExpressionName

protected String displayExpressionName()
Give a string representation of the expression name for use in diagnostics
Overrides:
displayExpressionName in interface UnaryExpression
Returns:
the expression name, as a string

evaluateItem

public Item evaluateItem(XPathContext context)
            throws XPathException
Evaluate as an Item.
Specified by:
evaluateItem in interface EvaluableItem
Overrides:
evaluateItem in interface Expression

getContainingFunction

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

getImplementationMethod

public int getImplementationMethod()
An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process(). This method indicates which of these methods is provided. This implementation provides both iterate() and process() methods natively.
Overrides:
getImplementationMethod in interface Expression

getItemType

public ItemType getItemType(TypeHierarchy th)
Determine the data type of the items returned by the expression
Overrides:
getItemType in interface UnaryExpression
Parameters:
th - The type hierarchy cache

iterate

public SequenceIterator iterate(XPathContext context)
            throws XPathException
Iterate over the sequence of values
Specified by:
iterate in interface SequenceIterable
Overrides:
iterate in interface Expression

process

public void process(XPathContext context)
            throws XPathException
Process the function body
Overrides:
process in interface Expression
Parameters:
context - The dynamic context, giving access to the current node, the current variables, etc.

typeCheck

public Expression typeCheck(ExpressionVisitor visitor,
                            ItemType contextItemType)
            throws XPathException
Type-check the expression
Overrides:
typeCheck in interface UnaryExpression