net.sf.saxon.expr
Class Assignation

java.lang.Object
  extended by net.sf.saxon.expr.Expression
      extended by net.sf.saxon.expr.Assignation
All Implemented Interfaces:
Serializable, SourceLocator, Binding, Container, EvaluableItem, SequenceIterable, InstructionInfoProvider
Direct Known Subclasses:
ForExpression, LetExpression, QuantifiedExpression

public abstract class Assignation
extends Expression
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
 
Fields inherited from class 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
 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.
 Expression getSequence()
          Get the "sequence" expression - the one to which the variable is bound
 RangeVariableDeclaration getVariableDeclaration()
          Get the variable declaration
 int getVariableFingerprint()
           
 String getVariableName()
          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.
 Iterator iterateSubExpressions()
          Get the immediate subexpressions of this expression
 Expression promote(PromotionOffer offer)
          Promote this expression if possible
 boolean replaceSubExpression(Expression original, Expression replacement)
          Replace one subexpression by a replacement subexpression
 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.Expression
adoptChildExpression, checkPermittedContents, computeDependencies, computeSpecialProperties, computeStaticProperties, display, doPromotion, effectiveBooleanValue, evaluateAsString, evaluateItem, getCardinality, getColumnNumber, getContainingProcedure, getDependencies, getExecutable, getHostLanguage, getImplementationMethod, getInstructionInfo, getIntrinsicDependencies, getItemType, getLineNumber, getLocationId, getLocationProvider, getParentExpression, getPublicId, getSlotsUsed, getSpecialProperties, getSystemId, hasBadParentPointer, iterate, markTailFunctionCalls, optimize, process, resetStaticProperties, setLocationId, setParentExpression, setParentExpression, typeCheck
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

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


getSequence

public Expression getSequence()
Get 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

Overrides:
simplify in class Expression
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

Overrides:
promote in class Expression
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 Expression

iterateSubExpressions

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

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

replaceSubExpression

public boolean replaceSubExpression(Expression original,
                                    Expression replacement)
Replace one subexpression by a replacement subexpression

Specified by:
replaceSubExpression in interface Container
Overrides:
replaceSubExpression in class Expression
Parameters:
original - the original subexpression
replacement - the replacement subexpression
Returns:
true if the original subexpression is found

getVariableNameCode

public int getVariableNameCode()

getVariableFingerprint

public int getVariableFingerprint()

getVariableName

public String getVariableName()
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


Copyright (C) Michael H. Kay. All rights reserved.