Package net.sf.saxon.expr.flwor
Class LocalVariableBinding
- java.lang.Object
-
- net.sf.saxon.expr.flwor.LocalVariableBinding
-
- All Implemented Interfaces:
Binding,LocalBinding
public class LocalVariableBinding extends java.lang.Object implements LocalBinding
Represents the defining occurrence of a variable declared within a FLWOR expression, for example the $p in "for $x at $p in ...". Also used for the variables bound to the context item in a pattern that uses current()
-
-
Constructor Summary
Constructors Constructor Description LocalVariableBinding(StructuredQName name, SequenceType type)Create a LocalVariableBinding
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddReference(VariableReference ref, boolean isLoopingReference)Register a variable reference that refers to the variable bound in this expressionLocalVariableBindingcopy()Make a copy of this LocalVariableBinding (except for the slot number)SequenceevaluateVariable(XPathContext context)Get the value of the range variableIntegerValue[]getIntegerBoundsForVariable()If the variable is bound to an integer, get the minimum and maximum possible values.intgetLocalSlotNumber()If this is a local variable held on the local stack frame, return the corresponding slot number.intgetNominalReferenceCount()Get the (nominal) count of the number of references to this variableSequenceTypegetRequiredType()Get the required type (declared type) of the variableStructuredQNamegetVariableQName()Get the name of the variablebooleanisAssignable()Test whether it is permitted to assign to the variable using the saxon:assign extension element.booleanisGlobal()Indicate whether the binding is local or global.booleanisIndexedVariable()Ask whether the binding is to be indexedvoidsetIndexedVariable()Indicate that the variable bound by this let expression should be indexable (because it is used in an appropriate filter expression)voidsetRequiredType(SequenceType type)Set the required or inferred type of the variablevoidsetSlotNumber(int nr)Set the slot number for the range variablevoidsetVariableQName(StructuredQName variableName)Set the name of the variable
-
-
-
Constructor Detail
-
LocalVariableBinding
public LocalVariableBinding(StructuredQName name, SequenceType type)
Create a LocalVariableBinding- Parameters:
name- the name of the variabletype- the static type of the variable
-
-
Method Detail
-
copy
public LocalVariableBinding copy()
Make a copy of this LocalVariableBinding (except for the slot number)- Returns:
- a copy of the binding
-
getVariableQName
public StructuredQName getVariableQName()
Get the name of the variable- Specified by:
getVariableQNamein interfaceBinding- Returns:
- the name of the variable
-
setRequiredType
public void setRequiredType(SequenceType type)
Set the required or inferred type of the variable- Parameters:
type- the required or inferred type
-
getRequiredType
public SequenceType getRequiredType()
Get the required type (declared type) of the variable- Specified by:
getRequiredTypein interfaceBinding- Returns:
- the required type
-
getIntegerBoundsForVariable
public IntegerValue[] getIntegerBoundsForVariable()
If the variable is bound to an integer, get the minimum and maximum possible values. Return null if unknown or not applicable- Specified by:
getIntegerBoundsForVariablein interfaceBinding- Returns:
- a pair of integers containing the minimum and maximum values for the integer value; or null if the value is not an integer or the range is unknown
-
getNominalReferenceCount
public int getNominalReferenceCount()
Get the (nominal) count of the number of references to this variable- Returns:
- zero if there are no references, one if there is a single reference that is not in a loop, some higher number if there are multiple references (or a single reference in a loop), or the special value @link RangeVariable#FILTERED} if there are any references in filter expressions that require searching.
-
addReference
public void addReference(VariableReference ref, boolean isLoopingReference)
Register a variable reference that refers to the variable bound in this expression- Specified by:
addReferencein interfaceBinding- Parameters:
ref-isLoopingReference- - true if the reference occurs within a loop, such as the predicate of a filter expression
-
setIndexedVariable
public void setIndexedVariable()
Indicate that the variable bound by this let expression should be indexable (because it is used in an appropriate filter expression)- Specified by:
setIndexedVariablein interfaceLocalBinding
-
isIndexedVariable
public boolean isIndexedVariable()
Description copied from interface:LocalBindingAsk whether the binding is to be indexed- Specified by:
isIndexedVariablein interfaceLocalBinding- Returns:
- true if the variable value can be indexed
-
setVariableQName
public void setVariableQName(StructuredQName variableName)
Set the name of the variable- Parameters:
variableName- the name of the variable
-
setSlotNumber
public void setSlotNumber(int nr)
Set the slot number for the range variable- Parameters:
nr- the slot number to be used
-
getLocalSlotNumber
public int getLocalSlotNumber()
If this is a local variable held on the local stack frame, return the corresponding slot number. In other cases, return -1.- Specified by:
getLocalSlotNumberin interfaceLocalBinding- Returns:
- the slot number on the local stack frame
-
evaluateVariable
public Sequence evaluateVariable(XPathContext context)
Get the value of the range variable- Specified by:
evaluateVariablein interfaceBinding- Parameters:
context- the XPath dynamic evaluation context- Returns:
- the result of evaluating the variable
-
isAssignable
public boolean isAssignable()
Test whether it is permitted to assign to the variable using the saxon:assign extension element. This will only be for an XSLT global variable where the extra attribute saxon:assignable="yes" is present.- Specified by:
isAssignablein interfaceBinding- Returns:
- true if the binding is assignable
-
-