Package net.sf.saxon.expr.instruct
Class GlobalVariable
- java.lang.Object
-
- net.sf.saxon.expr.instruct.GeneralVariable
-
- net.sf.saxon.expr.instruct.GlobalVariable
-
- All Implemented Interfaces:
java.io.Serializable
,javax.xml.transform.SourceLocator
,LocationProvider
,SaxonLocator
,Binding
,Container
,InstructionInfo
,org.xml.sax.Locator
- Direct Known Subclasses:
GlobalParam
public class GlobalVariable extends GeneralVariable implements Container, InstructionInfo
A compiled global variable in a stylesheet or query.- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from class net.sf.saxon.expr.instruct.GeneralVariable
evaluationMode, referenceCount, requiredType, select, slotNumber, variableQName
-
-
Constructor Summary
Constructors Constructor Description GlobalVariable()
Create a global variable
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ValueRepresentation
actuallyEvaluate(XPathContext context)
Evaluate the global variable, and save its value for use in subsequent references.ValueRepresentation
evaluateVariable(XPathContext context)
Evaluate the variableint
getColumnNumber(long locationId)
Get the column number within the document, entity, or module containing a particular locationint
getConstructType()
Get the type of construct.Container
getContainer()
Get the container in which this expression is located.int
getContainerGranularity()
Get the granularity of the container.Executable
getExecutable()
Get the executable containing this global variableint
getHostLanguage()
Get the host language (XSLT, XQuery, XPath) used to implement the code in this containerint
getLineNumber(long locationId)
Get the line number within the document, entity or module containing a particular locationStructuredQName
getObjectName()
Get a name identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc.java.util.Iterator<java.lang.String>
getProperties()
Get an iterator over all the properties available.java.lang.Object
getProperty(java.lang.String name)
Get the value of a particular property of the instruction.ValueRepresentation
getSelectValue(XPathContext context)
Evaluate the variable.boolean
isGlobal()
Is this a global variable?boolean
isIndexedVariable()
Ask whether this is an indexed variablevoid
lookForCycles(java.util.Stack<Container> referees, XQueryFunctionLibrary globalFunctionLibrary)
Check for cycles in this variable definitionvoid
setContainsLocals(SlotManager map)
The expression that initializes a global variable may itself use local variables.protected static void
setDependencies(Bindery bindery, GlobalVariable var, XPathContext context)
Get the variable that is immediately dependent on this one, and register the dependency, so that circularities can be detected across threads.void
setExecutable(Executable executable)
Set the containing executablevoid
setIndexedVariable()
Mark this as an indexed variable, to allow fast searching-
Methods inherited from class net.sf.saxon.expr.instruct.GeneralVariable
addReference, checkAgainstRequiredType, computeEvaluationMode, copy, explain, getCardinality, getColumnNumber, getEvaluationMode, getInstructionNameCode, getIntegerBoundsForVariable, getLineNumber, getLocalSlotNumber, getLocationId, getLocationProvider, getPublicId, getRequiredType, getSelectExpression, getSlotNumber, getSystemId, getSystemId, getVariableQName, init, isAssignable, isImplicitlyRequiredParam, isRequiredParam, isTunnelParam, iterateSubExpressions, optimize, replaceSubExpression, setAssignable, setContainer, setImplicitlyRequiredParam, setLocationId, setReferenceCount, setRequiredParam, setRequiredType, setSelectExpression, setSlotNumber, setTunnel, setVariableQName, simplify, typeCheck
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.sf.saxon.expr.Container
getLocationProvider
-
Methods inherited from interface net.sf.saxon.trace.InstructionInfo
getLineNumber, getSystemId
-
Methods inherited from interface net.sf.saxon.event.LocationProvider
getSystemId
-
-
-
-
Method Detail
-
getExecutable
public Executable getExecutable()
Get the executable containing this global variable- Specified by:
getExecutable
in interfaceContainer
- Overrides:
getExecutable
in classGeneralVariable
- Returns:
- the containing executable
-
setExecutable
public void setExecutable(Executable executable)
Set the containing executable- Parameters:
executable
- the executable that contains this global variable
-
getLineNumber
public int getLineNumber(long locationId)
Get the line number within the document, entity or module containing a particular location- Specified by:
getLineNumber
in interfaceLocationProvider
- Parameters:
locationId
- identifier of the location in question (as passed down the Receiver pipeline)- Returns:
- the line number within the document, entity or module, or -1 if no information is available.
-
getColumnNumber
public int getColumnNumber(long locationId)
Get the column number within the document, entity, or module containing a particular location- Specified by:
getColumnNumber
in interfaceLocationProvider
- Parameters:
locationId
- identifier of the location in question (as passed down the Receiver pipeline)- Returns:
- the column number within the document, entity, or module, or -1 if this is not available
-
getConstructType
public int getConstructType()
Get the type of construct. This will either be the fingerprint of a standard XSLT instruction name (values inStandardNames
: all less than 1024) or it will be a constant in classLocation
.- Specified by:
getConstructType
in interfaceInstructionInfo
- Returns:
- an integer identifying the kind of construct
-
getObjectName
public StructuredQName getObjectName()
Get a name identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc. This is used only where the name is known statically.- Specified by:
getObjectName
in interfaceInstructionInfo
- Returns:
- the QName of the object declared or manipulated by this instruction or expression
-
getProperty
public java.lang.Object getProperty(java.lang.String name)
Get the value of a particular property of the instruction. Properties of XSLT instructions are generally known by the name of the stylesheet attribute that defines them.- Specified by:
getProperty
in interfaceInstructionInfo
- Parameters:
name
- The name of the required property- Returns:
- The value of the requested property, or null if the property is not available
-
getProperties
public java.util.Iterator<java.lang.String> getProperties()
Get an iterator over all the properties available. The values returned by the iterator will be of type String, and each string can be supplied as input to the getProperty() method to retrieve the value of the property. The iterator may return properties whose value is null.- Specified by:
getProperties
in interfaceInstructionInfo
- Returns:
- an iterator over the properties.
-
getContainer
public Container getContainer()
Get the container in which this expression is located. This will usually be a top-level construct such as a function or global variable, and XSLT template, or an XQueryExpression. In the case of free-standing XPath expressions it will be the StaticContext object- Overrides:
getContainer
in classGeneralVariable
- Returns:
- the expression's container
-
getHostLanguage
public int getHostLanguage()
Get the host language (XSLT, XQuery, XPath) used to implement the code in this container- Specified by:
getHostLanguage
in interfaceContainer
- Returns:
- typically
Configuration.XSLT
orConfiguration.XQUERY
-
setIndexedVariable
public void setIndexedVariable()
Mark this as an indexed variable, to allow fast searching
-
isIndexedVariable
public boolean isIndexedVariable()
Ask whether this is an indexed variable- Returns:
- true if this variable is indexed
-
getContainerGranularity
public int getContainerGranularity()
Get the granularity of the container.- Specified by:
getContainerGranularity
in interfaceContainer
- Returns:
- 0 for a temporary container created during parsing; 1 for a container that operates at the level of an XPath expression; 2 for a container at the level of a global function or template
-
setContainsLocals
public void setContainsLocals(SlotManager map)
The expression that initializes a global variable may itself use local variables. In this case a stack frame needs to be allocated while evaluating the global variable- Parameters:
map
- The stack frame map for local variables used while evaluating this global variable.
-
isGlobal
public boolean isGlobal()
Is this a global variable?- Specified by:
isGlobal
in interfaceBinding
- Overrides:
isGlobal
in classGeneralVariable
- Returns:
- true (yes, it is a global variable)
-
lookForCycles
public void lookForCycles(java.util.Stack<Container> referees, XQueryFunctionLibrary globalFunctionLibrary) throws XPathException
Check for cycles in this variable definition- Parameters:
referees
- the calls leading up to this one; it's an error if this variable is on the stack, because that means it calls itself directly or indirectly. The stack may contain variable definitions (GlobalVariable objects) and user-defined functions (UserFunction objects). It will never contain the same object more than once.globalFunctionLibrary
- the library containing all global functions- Throws:
XPathException
- if cycles are found
-
getSelectValue
public ValueRepresentation getSelectValue(XPathContext context) throws XPathException
Evaluate the variable. That is, get the value of the select expression if present or the content of the element otherwise, either as a tree or as a sequence- Overrides:
getSelectValue
in classGeneralVariable
- Parameters:
context
- the XPath dynamic context- Returns:
- the result of evaluating the variable
- Throws:
XPathException
- if evaluation of the select expression fails with a dynamic error
-
evaluateVariable
public ValueRepresentation evaluateVariable(XPathContext context) throws XPathException
Evaluate the variable- Specified by:
evaluateVariable
in interfaceBinding
- Parameters:
context
- the XPath dynamic evaluation context- Returns:
- the result of evaluating the variable
- Throws:
XPathException
- if an error occurs while evaluating the variable
-
actuallyEvaluate
protected ValueRepresentation actuallyEvaluate(XPathContext context) throws XPathException
Evaluate the global variable, and save its value for use in subsequent references.- Parameters:
context
- the XPath dynamic context- Returns:
- the value of the variable
- Throws:
XPathException
- if evaluation fails
-
setDependencies
protected static void setDependencies(Bindery bindery, GlobalVariable var, XPathContext context) throws XPathException
Get the variable that is immediately dependent on this one, and register the dependency, so that circularities can be detected across threads. This relies on the fact that when the initialiser for variable X contains a reference to variable Y, then when Y is evaluated, a stack frame will be found on the context stack representing the evaluation of X. We don't set a dependency from X to Y if the value of Y was already available in the Bindery; it's not needed, because in this case we know that evaluation of Y is unproblematic, and can't lead to any circularities.- Parameters:
bindery
- the Binderyvar
- the global variable or parameter being evaluatedcontext
- the dynamic evaluation context- Throws:
XPathException
-
-