net.sf.saxon.instruct
Class FunctionInstr

java.lang.Object
  |
  +--net.sf.saxon.instruct.FunctionInstr
All Implemented Interfaces:
CallableFunction, InstructionInfo, java.io.Serializable

public final class FunctionInstr
extends java.lang.Object
implements CallableFunction, InstructionInfo, java.io.Serializable

Handler for xsl:function elements in stylesheet (XSLT 2.0).
Attributes:
name gives the name of the function saxon:memo-function=yes|no indicates whether it acts as a memo function.

See Also:
Serialized Form

Constructor Summary
FunctionInstr()
          A FunctionInstr is constructed in two stages.
 
Method Summary
 Value call(Value[] actualArgs, Controller controller, boolean evaluateTailCalls)
          Call this function.
 java.lang.String getFunctionName()
          Get the name of the function, for diagnostics
 java.lang.String getInstructionName()
          Get the name of the instruction.
 int getLineNumber()
          Get the line number of the instruction in the source stylesheet module.
 java.util.HashMap getProperties()
          Get all the properties of the instruction.
 java.lang.Object getProperty(java.lang.String propertyName)
          Provide information to the TraceListener if required
 java.lang.String getSystemId()
          Get the system identifier (URI) of the source stylesheet module containing the instruction.
 void initialize(SequenceInstruction body, java.lang.String baseURI, java.lang.String displayName, boolean memoFunction)
           
 TailCall processLeavingTail(XPathContext context)
          Dummy processLeavingTail() method
 void setInstructionDetails(Controller controller, NamePool namePool, InstructionDetails details)
          Set the name of this instruction for diagnostic and tracing purposes to the string "function"
 void setLineNumber(int lineNumber)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FunctionInstr

public FunctionInstr()
A FunctionInstr is constructed in two stages. The object is created as soon as the corresponding xsl:function object is created, so that XPath expressions can be constructed containing a reference to this FunctionInstr. The details of the FunctionInstr are supplied later, when the function is compiled.

Method Detail

initialize

public void initialize(SequenceInstruction body,
                       java.lang.String baseURI,
                       java.lang.String displayName,
                       boolean memoFunction)

setLineNumber

public void setLineNumber(int lineNumber)

getLineNumber

public int getLineNumber()
Description copied from interface: InstructionInfo
Get the line number of the instruction in the source stylesheet module. If this is not known, or if the instruction is an artificial one that does not relate to anything in the source code, the value returned may be -1.

Specified by:
getLineNumber in interface InstructionInfo

getSystemId

public java.lang.String getSystemId()
Description copied from interface: InstructionInfo
Get the system identifier (URI) of the source stylesheet module containing the instruction. This will generally be an absolute URI. If the system identifier is not known, the method may return null. In some cases, for example where XML external entities are used, the correct system identifier is not always retained.

Specified by:
getSystemId in interface InstructionInfo

getProperty

public java.lang.Object getProperty(java.lang.String propertyName)
Provide information to the TraceListener if required

Specified by:
getProperty in interface InstructionInfo
Parameters:
propertyName - The name of the required property
Returns:
For the "name" property, return the name of the function (as a lexical QName). For any other property, return null.

getProperties

public java.util.HashMap getProperties()
Description copied from interface: InstructionInfo
Get all the properties of the instruction. Properties of XSLT instructions are generally known by the name of the stylesheet attribute that defines them.

Specified by:
getProperties in interface InstructionInfo
Returns:
a HashMap containing all the properties of this instruction.

setInstructionDetails

public void setInstructionDetails(Controller controller,
                                  NamePool namePool,
                                  InstructionDetails details)
Set the name of this instruction for diagnostic and tracing purposes to the string "function"


getInstructionName

public java.lang.String getInstructionName()
Description copied from interface: InstructionInfo
Get the name of the instruction. This will normally be the name of an XSLT instruction, a literal result element, or an extension element. The name is passed in a form suitable for display to the user: it will generally be a QName, but this is not guaranteed. Some instructions may be internally generated by the Saxon compiler, in which case the name might not relate to anything obvious in the source stylesheet

Specified by:
getInstructionName in interface InstructionInfo

getFunctionName

public java.lang.String getFunctionName()
Description copied from interface: CallableFunction
Get the name of the function, for diagnostics

Specified by:
getFunctionName in interface CallableFunction
Returns:
the function name, as a lexical QName

processLeavingTail

public TailCall processLeavingTail(XPathContext context)
Dummy processLeavingTail() method


call

public Value call(Value[] actualArgs,
                  Controller controller,
                  boolean evaluateTailCalls)
           throws javax.xml.transform.TransformerException
Call this function.

Specified by:
call in interface CallableFunction
Parameters:
actualArgs - the arguments supplied to the function. These must have the correct types required by the function signature (it is the caller's responsibility to check this). It is acceptable to supply a Closure to represent a value whose evaluation will be delayed until it is needed. The array must be the correct size to match the number of arguments: again, it is the caller's responsibility to check this.
controller - This provides the run-time context for evaluating the function.
evaluateTailCalls - if true, then any function calls contained in the body of the function are evaluated in the normal way, whether or not they are marked as tail calls. If the argument is false, then tail calls are not evaluated, and instead a FunctionCallPackage is returned containing the information needed to evaluate the function. The caller must then be prepared to deal with this returned value by evaluating the packaged function call (which may return further packaged function calls, and so on).
Returns:
a Value representing the result of the function.
javax.xml.transform.TransformerException