net.sf.saxon.expr.flwor
Class LocalVariableBinding

java.lang.Object
  extended by 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 Summary
LocalVariableBinding(StructuredQName name, SequenceType type)
          Create a LocalVariableBinding
 
Method Summary
 void addReference(boolean isLoopingReference)
          Register a variable reference that refers to the variable bound in this expression
 LocalVariableBinding copy()
          Make a copy of this LocalVariableBinding (except for the slot number)
 ValueRepresentation evaluateVariable(XPathContext context)
          Get the value of the range variable
 IntegerValue[] getIntegerBoundsForVariable()
          If the variable is bound to an integer, get the minimum and maximum possible values.
 int getLocalSlotNumber()
          If this is a local variable held on the local stack frame, return the corresponding slot number.
 int getNominalReferenceCount()
          Get the (nominal) count of the number of references to this variable
 SequenceType getRequiredType()
          Get the required type (declared type) of the variable
 StructuredQName getVariableQName()
          Get the name of the variable
 boolean isAssignable()
          Test whether it is permitted to assign to the variable using the saxon:assign extension element.
 boolean isGlobal()
          Indicate whether the binding is local or global.
 void setIndexedVariable()
          Indicate that the variable bound by this let expression should be indexable (because it is used in an appropriate filter expression)
 void setSlotNumber(int nr)
          Set the slot number for the range variable
 void setVariableQName(StructuredQName variableName)
          Set the name of the variable
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

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 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:
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


Copyright (c) 2004-2011 Saxonica Limited. All rights reserved.