net.sf.saxon.expr.instruct
Class GlobalVariable

java.lang.Object
  extended by net.sf.saxon.expr.instruct.GeneralVariable
      extended by net.sf.saxon.expr.instruct.GlobalVariable
All Implemented Interfaces:
Serializable, SourceLocator, LocationProvider, SaxonLocator, Binding, Container, InstructionInfo, Locator
Direct Known Subclasses:
GlobalParam

public class GlobalVariable
extends GeneralVariable
implements Container, InstructionInfo

A compiled global variable in a stylesheet or query.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class net.sf.saxon.expr.instruct.GeneralVariable
evaluationMode, referenceCount, slotNumber, variableQName
 
Constructor Summary
GlobalVariable()
          Create a global variable
 
Method Summary
protected  ValueRepresentation actuallyEvaluate(XPathContext context)
          Evaluate the global variable, and save its value for use in subsequent references.
 ValueRepresentation evaluateVariable(XPathContext context)
          Evaluate the variable
 int getColumnNumber(long locationId)
          Get the column number within the document, entity, or module containing a particular location
 int getConstructType()
          Get the type of construct.
 Container getContainer()
          Get the container in which this expression is located.
 int getContainerGranularity()
          Get the granularity of the container.
 Executable getExecutable()
          Get the executable containing this global variable
 int getHostLanguage()
          Get the host language (XSLT, XQuery, XPath) used to implement the code in this container
 int getLineNumber(long locationId)
          Get the line number within the document, entity or module containing a particular location
 StructuredQName getObjectName()
          Get a name identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc.
 Iterator<String> getProperties()
          Get an iterator over all the properties available.
 Object getProperty(String name)
          Get the value of a particular property of the instruction.
 ValueRepresentation getSelectValue(XPathContext context)
          Evaluate the variable.
 boolean isGlobal()
          Is this a global variable?
 boolean isIndexedVariable()
          Ask whether this is an indexed variable
 void lookForCycles(Stack<Container> referees, XQueryFunctionLibrary globalFunctionLibrary)
          Check for cycles in this variable definition
 void setContainsLocals(SlotManager map)
          The expression that initializes a global variable may itself use local variables.
protected static void setDependencies(Bindery bindery, GlobalVariable var, XPathContext context)
          Get the variable that is immediately dependent on this one, and register the dependency, so that circularities can be detected across threads.
 void setExecutable(Executable executable)
          Set the containing executable
 void setIndexedVariable()
          Mark this as an indexed variable, to allow fast searching
 
Methods inherited from class net.sf.saxon.expr.instruct.GeneralVariable
addReference, checkAgainstRequiredType, computeEvaluationMode, copy, explain, getCardinality, getColumnNumber, getEvaluationMode, getInstructionNameCode, getIntegerBoundsForVariable, getLineNumber, getLocalSlotNumber, getLocationId, getLocationProvider, getPublicId, getRequiredType, getSelectExpression, getSlotNumber, getSystemId, getSystemId, getVariableQName, init, isAssignable, isImplicitlyRequiredParam, isRequiredParam, isTunnelParam, iterateSubExpressions, optimize, replaceSubExpression, setAssignable, setContainer, setImplicitlyRequiredParam, setLocationId, setReferenceCount, setRequiredParam, setRequiredType, setSelectExpression, setSlotNumber, setTunnel, setVariableQName, simplify, typeCheck
 
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.Container
getLocationProvider
 
Methods inherited from interface net.sf.saxon.trace.InstructionInfo
getLineNumber, getSystemId
 
Methods inherited from interface org.xml.sax.Locator
getColumnNumber, getPublicId
 
Methods inherited from interface javax.xml.transform.SourceLocator
getColumnNumber, getPublicId
 
Methods inherited from interface net.sf.saxon.event.LocationProvider
getSystemId
 

Constructor Detail

GlobalVariable

public GlobalVariable()
Create a global variable

Method Detail

getExecutable

public Executable getExecutable()
Get the executable containing this global variable

Specified by:
getExecutable in interface Container
Overrides:
getExecutable in class GeneralVariable
Returns:
the containing executable

setExecutable

public void setExecutable(Executable executable)
Set the containing executable

Parameters:
executable - the executable that contains this global variable

getLineNumber

public int getLineNumber(long locationId)
Get the line number within the document, entity or module containing a particular location

Specified by:
getLineNumber in interface LocationProvider
Parameters:
locationId - identifier of the location in question (as passed down the Receiver pipeline)
Returns:
the line number within the document, entity or module, or -1 if no information is available.

getColumnNumber

public int getColumnNumber(long locationId)
Get the column number within the document, entity, or module containing a particular location

Specified by:
getColumnNumber in interface LocationProvider
Parameters:
locationId - identifier of the location in question (as passed down the Receiver pipeline)
Returns:
the column number within the document, entity, or module, or -1 if this is not available

getConstructType

public int getConstructType()
Get the type of construct. This will either be the fingerprint of a standard XSLT instruction name (values in StandardNames: all less than 1024) or it will be a constant in class Location.

Specified by:
getConstructType in interface InstructionInfo
Returns:
an integer identifying the kind of construct

getObjectName

public StructuredQName getObjectName()
Get a name identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc. This is used only where the name is known statically.

Specified by:
getObjectName in interface InstructionInfo
Returns:
the QName of the object declared or manipulated by this instruction or expression

getProperty

public Object getProperty(String name)
Get the value of a particular property of the instruction. Properties of XSLT instructions are generally known by the name of the stylesheet attribute that defines them.

Specified by:
getProperty in interface InstructionInfo
Parameters:
name - The name of the required property
Returns:
The value of the requested property, or null if the property is not available

getProperties

public Iterator<String> getProperties()
Get an iterator over all the properties available. The values returned by the iterator will be of type String, and each string can be supplied as input to the getProperty() method to retrieve the value of the property. The iterator may return properties whose value is null.

Specified by:
getProperties in interface InstructionInfo
Returns:
an iterator over the properties.

getContainer

public Container getContainer()
Get the container in which this expression is located. This will usually be a top-level construct such as a function or global variable, and XSLT template, or an XQueryExpression. In the case of free-standing XPath expressions it will be the StaticContext object

Overrides:
getContainer in class GeneralVariable
Returns:
the expression's container

getHostLanguage

public int getHostLanguage()
Get the host language (XSLT, XQuery, XPath) used to implement the code in this container

Specified by:
getHostLanguage in interface Container
Returns:
typically Configuration.XSLT or Configuration.XQUERY

setIndexedVariable

public void setIndexedVariable()
Mark this as an indexed variable, to allow fast searching


isIndexedVariable

public boolean isIndexedVariable()
Ask whether this is an indexed variable

Returns:
true if this variable is indexed

getContainerGranularity

public int getContainerGranularity()
Get the granularity of the container.

Specified by:
getContainerGranularity in interface Container
Returns:
0 for a temporary container created during parsing; 1 for a container that operates at the level of an XPath expression; 2 for a container at the level of a global function or template

setContainsLocals

public void setContainsLocals(SlotManager map)
The expression that initializes a global variable may itself use local variables. In this case a stack frame needs to be allocated while evaluating the global variable

Parameters:
map - The stack frame map for local variables used while evaluating this global variable.

isGlobal

public boolean isGlobal()
Is this a global variable?

Specified by:
isGlobal in interface Binding
Overrides:
isGlobal in class GeneralVariable
Returns:
true (yes, it is a global variable)

lookForCycles

public void lookForCycles(Stack<Container> referees,
                          XQueryFunctionLibrary globalFunctionLibrary)
                   throws XPathException
Check for cycles in this variable definition

Parameters:
referees - the calls leading up to this one; it's an error if this variable is on the stack, because that means it calls itself directly or indirectly. The stack may contain variable definitions (GlobalVariable objects) and user-defined functions (UserFunction objects). It will never contain the same object more than once.
globalFunctionLibrary - the library containing all global functions
Throws:
XPathException - if cycles are found

getSelectValue

public ValueRepresentation getSelectValue(XPathContext context)
                                   throws XPathException
Evaluate the variable. That is, get the value of the select expression if present or the content of the element otherwise, either as a tree or as a sequence

Overrides:
getSelectValue in class GeneralVariable
Parameters:
context - the XPath dynamic context
Returns:
the result of evaluating the variable
Throws:
XPathException - if evaluation of the select expression fails with a dynamic error

evaluateVariable

public ValueRepresentation evaluateVariable(XPathContext context)
                                     throws XPathException
Evaluate the 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

actuallyEvaluate

protected ValueRepresentation actuallyEvaluate(XPathContext context)
                                        throws XPathException
Evaluate the global variable, and save its value for use in subsequent references.

Parameters:
context - the XPath dynamic context
Returns:
the value of the variable
Throws:
XPathException - if evaluation fails

setDependencies

protected static void setDependencies(Bindery bindery,
                                      GlobalVariable var,
                                      XPathContext context)
                               throws XPathException
Get the variable that is immediately dependent on this one, and register the dependency, so that circularities can be detected across threads. This relies on the fact that when the initialiser for variable X contains a reference to variable Y, then when Y is evaluated, a stack frame will be found on the context stack representing the evaluation of X. We don't set a dependency from X to Y if the value of Y was already available in the Bindery; it's not needed, because in this case we know that evaluation of Y is unproblematic, and can't lead to any circularities.

Parameters:
bindery - the Bindery
var - the global variable or parameter being evaluated
context - the dynamic evaluation context
Throws:
XPathException


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