net.sf.saxon.expr
Class Assignation

java.lang.Object
  extended bynet.sf.saxon.expr.ComputedExpression
      extended bynet.sf.saxon.expr.Assignation
All Implemented Interfaces:
Binding, Container, Expression, InstructionInfoProvider, java.io.Serializable, javax.xml.transform.SourceLocator
Direct Known Subclasses:
ForExpression, LetExpression

public abstract class Assignation
extends ComputedExpression
implements Binding

Assignation is an abstract superclass for the kinds of expression that declare range variables: for, some, and every.

See Also:
Serialized Form

Field Summary
protected  Expression action
           
protected  RangeVariableDeclaration declaration
           
protected  int nameCode
           
protected  Expression sequence
           
protected  int slotNumber
           
protected  java.lang.String variableName
           
 
Fields inherited from class net.sf.saxon.expr.ComputedExpression
locationId, staticProperties
 
Fields inherited from interface net.sf.saxon.expr.Expression
EVALUATE_METHOD, ITERATE_METHOD, PROCESS_METHOD
 
Constructor Summary
Assignation()
           
 
Method Summary
 ValueRepresentation evaluateVariable(XPathContext context)
          Get the value of the range variable
protected  Binding[] extendBindingList(Binding[] in)
          Extend an array of variable bindings to include the binding(s) defined in this expression
 Expression getAction()
          Get the action expression
 int getLocalSlotNumber()
          If this is a local variable held on the local stack frame, return the corresponding slot number.
 int getRequiredSlots()
          Get the number of slots required.
 RangeVariableDeclaration getVariableDeclaration()
          Get the variable declaration
 int getVariableFingerprint()
           
 java.lang.String getVariableName(NamePool pool)
          Get the display name of the range variable, for diagnostics only
 int getVariableNameCode()
           
 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.
 java.util.Iterator iterateSubExpressions()
          Get the immediate subexpressions of this expression
 Expression promote(PromotionOffer offer)
          Promote this expression if possible
protected  Expression promoteWhereClause(Binding positionBinding)
          Promote a WHERE clause whose condition doesn't depend on the variable being bound.
 void setAction(Expression action)
          Add the "return" or "satisfies" expression, and fix up all references to the range variable that occur within that expression
 void setSequence(Expression sequence)
          Set the "sequence" expression - the one to which the variable is bound
 void setSlotNumber(int nr)
          Set the slot number for the range variable
 void setVariableDeclaration(RangeVariableDeclaration decl)
          Set the reference to the variable declaration
 Expression simplify(StaticContext env)
          Simplify the expression
 void suppressValidation(int validationMode)
          Suppress validation on contained element constructors, on the grounds that the parent element is already performing validation.
 
Methods inherited from class net.sf.saxon.expr.ComputedExpression
adoptChildExpression, checkPermittedContents, computeCardinality, computeDependencies, computeSpecialProperties, computeStaticProperties, doPromotion, dynamicError, dynamicError, effectiveBooleanValue, evaluateAsString, evaluateItem, getCardinality, getColumnNumber, getConstructType, getDependencies, getExecutable, getHostLanguage, getImplementationMethod, getInstructionInfo, getIntrinsicDependencies, getLineNumber, getLocationId, getLocationProvider, getParentExpression, getPublicId, getSlotsUsed, getSpecialProperties, getSystemId, hasBadParentPointer, iterate, markTailFunctionCalls, process, resetStaticProperties, setLocationId, setParentExpression, typeError, typeError
 
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.Expression
display, getItemType, optimize, typeCheck
 

Field Detail

slotNumber

protected int slotNumber

sequence

protected Expression sequence

action

protected Expression action

variableName

protected java.lang.String variableName

nameCode

protected int nameCode

declaration

protected transient RangeVariableDeclaration declaration
Constructor Detail

Assignation

public Assignation()
Method Detail

setVariableDeclaration

public void setVariableDeclaration(RangeVariableDeclaration decl)
Set the reference to the variable declaration


getVariableDeclaration

public RangeVariableDeclaration getVariableDeclaration()
Get the variable declaration


setAction

public void setAction(Expression action)
Add the "return" or "satisfies" expression, and fix up all references to the range variable that occur within that expression

Parameters:
action - the expression that occurs after the "return" keyword of a "for" expression, the "satisfies" keyword of "some/every", or the ":=" operator of a "let" expression.

This method must be called after calling setVariableDeclaration()


isGlobal

public final 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

isAssignable

public final 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

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

getAction

public Expression getAction()
Get the action expression


setSequence

public void setSequence(Expression sequence)
Set the "sequence" expression - the one to which the variable is bound


setSlotNumber

public void setSlotNumber(int nr)
Set the slot number for the range variable


getRequiredSlots

public int getRequiredSlots()
Get the number of slots required. Normally 1, except for a FOR expression with an AT clause, where it is 2.


simplify

public Expression simplify(StaticContext env)
                    throws XPathException
Simplify the expression

Specified by:
simplify in interface Expression
Overrides:
simplify in class ComputedExpression
Returns:
the simplified expression
Throws:
XPathException - if an error is discovered during expression rewriting

promote

public Expression promote(PromotionOffer offer)
                   throws XPathException
Promote this expression if possible

Specified by:
promote in interface Expression
Overrides:
promote in class ComputedExpression
Parameters:
offer - details of the offer, for example the offer to move expressions that don't depend on the context to an outer level in the containing expression
Returns:
if the offer is not accepted, return this expression unchanged. Otherwise return the result of rewriting the expression to promote this subexpression
Throws:
XPathException - if any error is detected

suppressValidation

public void suppressValidation(int validationMode)
Suppress validation on contained element constructors, on the grounds that the parent element is already performing validation. The default implementation does nothing.

Overrides:
suppressValidation in class ComputedExpression

extendBindingList

protected Binding[] extendBindingList(Binding[] in)
Extend an array of variable bindings to include the binding(s) defined in this expression


promoteWhereClause

protected Expression promoteWhereClause(Binding positionBinding)
Promote a WHERE clause whose condition doesn't depend on the variable being bound. This rewrites an expression of the form

let $i := SEQ return if (C) then R else ()

to the form:

if (C) then (let $i := SEQ return R) else ()


iterateSubExpressions

public java.util.Iterator iterateSubExpressions()
Get the immediate subexpressions of this expression

Specified by:
iterateSubExpressions in interface Expression
Overrides:
iterateSubExpressions in class ComputedExpression
Returns:
an iterator containing the sub-expressions of this expression

getVariableNameCode

public int getVariableNameCode()

getVariableFingerprint

public int getVariableFingerprint()

getVariableName

public java.lang.String getVariableName(NamePool pool)
Get the display name of the range variable, for diagnostics only


evaluateVariable

public ValueRepresentation evaluateVariable(XPathContext context)
                                     throws XPathException
Get the value of the range variable

Specified by:
evaluateVariable in interface Binding
Throws:
XPathException