Class LocalVariableBinding

java.lang.Object
net.sf.saxon.expr.flwor.LocalVariableBinding
All Implemented Interfaces:
Binding

public class LocalVariableBinding extends Object implements Binding
Represents the defining occurrence of a variable declared within a FLWOR expression, for example the $p in "for $x at $p in ...".
  • Constructor Details

    • LocalVariableBinding

      public LocalVariableBinding(StructuredQName name, SequenceType type)
      Create a LocalVariableBinding
      Parameters:
      name - the name of the variable
      type - the static type of the variable
  • Method Details

    • 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:
      getVariableQName in interface Binding
      Returns:
      the name of the variable
    • getRequiredType

      public SequenceType getRequiredType()
      Get the required type (declared type) of the variable
      Specified by:
      getRequiredType in interface Binding
      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:
      getIntegerBoundsForVariable in interface Binding
      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(boolean isLoopingReference)
      Register a variable reference that refers to the variable bound in this expression
      Specified by:
      addReference in interface Binding
      Parameters:
      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)
    • 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:
      getLocalSlotNumber in interface Binding
      Returns:
      the slot number on the local stack frame
    • evaluateVariable

      public ValueRepresentation evaluateVariable(XPathContext context) throws XPathException
      Get the value of the range variable
      Specified by:
      evaluateVariable in interface Binding
      Parameters:
      context - the XPath dynamic evaluation context
      Returns:
      the result of evaluating the variable
      Throws:
      XPathException - if an error occurs while 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:
      isAssignable in interface Binding
      Returns:
      true if the binding is assignable
    • isGlobal

      public boolean isGlobal()
      Indicate whether the binding is local or global. A global binding is one that has a fixed value for the life of a query or transformation; any other binding is local.
      Specified by:
      isGlobal in interface Binding
      Returns:
      true if the binding is global