net.sf.saxon.expr

Class UserFunctionCall.FunctionCallPackage

public class UserFunctionCall.FunctionCallPackage extends ObjectValue

Inner class used to wrap up the set of actual arguments to a tail-recursive call of the containing function. This argument package is passed back to the calling code in place of a function result; the caller then loops to re-invoke the function with these arguments, avoiding the creation of an additional stack frame.
Constructor Summary
FunctionCallPackage(UserFunction function, ValueRepresentation[] actualArgs, XPathContext c)
Method Summary
ValueRepresentationcall()
ItemTypegetItemType(TypeHierarchy th)
Determine the item type of the expression
AtomicValuegetPrimitiveValue()
Get the primitive value (the value in the value space).
SequenceIteratoriterateResults(XPathContext context)
Valuereduce()
Reduce a value to its simplest form.

Constructor Detail

FunctionCallPackage

public FunctionCallPackage(UserFunction function, ValueRepresentation[] actualArgs, XPathContext c)

Method Detail

call

public ValueRepresentation call()

getItemType

public ItemType getItemType(TypeHierarchy th)
Determine the item type of the expression

Parameters: th

getPrimitiveValue

public AtomicValue getPrimitiveValue()
Get the primitive value (the value in the value space). This returns an AtomicValue of a class that would be used to represent the primitive value. In effect this means that for built-in types, it returns the value itself, but for user-defined type, it returns the primitive value minus the type annotation. Note that getItemType() when applied to the result of this function does not not necessarily return a primitive type: for example, this function may return a value of type xdt:dayTimeDuration, which is not a primitive type as defined by Type

iterateResults

public SequenceIterator iterateResults(XPathContext context)

reduce

public Value reduce()
Reduce a value to its simplest form. If the value is a closure or some other form of deferred value such as a FunctionCallPackage, then it is reduced to a SequenceExtent. If it is a SequenceExtent containing a single item, then it is reduced to that item. One consequence that is exploited by class FilterExpression is that if the value is a singleton numeric value, then the result will be an instance of NumericValue