## com.icl.saxon
Class Bindery

    java.lang.Object
      |
      +--com.icl.saxon.Bindery

public final class Bindery
extends java.lang.Object

The Bindery class holds information about variables and their values. Variables are identified by a Binding object. Values can be any object, though values of XSL variables will always be of class Value.

Constructor Summary
`Bindery()`

Method Summary
`void` `allocateGlobals(int n)` Define how many slots are needed for global variables
`void` `allocateLocals(int n)` Define how many slots are needed for local variables.
`void` `assignVariable(Binding binding, Value value)` Assign a new value to a variable
`void` `closeStackFrame()` Close the current stack frame for local variables
`void` `defineGlobalParameters(ParameterSet params)` Define global parameters
`void` `defineGlobalVariable(Binding binding, Value value)` Define global variable
`void` `defineLocalVariable(Binding binding, Value value)` Define local variable
`int` `getFrameId()` Get the id of the current frame.
`Value` `getLocalParameter(int fingerprint)` Get local parameter.
`Value` `getValue(Binding binding)` Get the value of a variable
`Value` `getValue(Binding binding, int frameId)` Get the value of a variable in the given frame
`boolean` `isEvaluated(Binding binding)` Test if global variable has already been evaluated
`void` `openStackFrame(ParameterSet localParameters)` Start a new stack frame for local variables
`void` `setExecuting(Binding binding, boolean executing)` Set/Unset a flag to indicate that a particular global variable is currently being evaluated.
`boolean` `useGlobalParameter(int fingerprint, Binding binding)` Use global parameter.
`boolean` `useLocalParameter(int fingerprint, Binding binding)` Use local parameter.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### Bindery

    public Bindery()

Method Detail

### allocateGlobals

    public void allocateGlobals(int n)

  Define how many slots are needed for global variables

### defineGlobalParameters

    public void defineGlobalParameters(ParameterSet params)

  Define global parameters
  Parameters:
    `params` - The ParameterSet passed in by the user, eg. from the command line

### useGlobalParameter

    public boolean useGlobalParameter(int fingerprint,
                                      Binding binding)

  Use global parameter. This is called when a global xsl:param element is processed. If a parameter of the relevant name was supplied, it is bound to the xsl:param element. Otherwise the method returns false, so the xsl:param default will be evaluated
  Parameters:
    `fingerprint` - The fingerprint of the parameter
    `binding` - The XSLParam element to bind its value to
  Returns:
    true if a parameter of this name was supplied, false if not

### defineGlobalVariable

    public void defineGlobalVariable(Binding binding,
                                     Value value)

  Define global variable
  Parameters:
    `name` - the name of the variable
    `value` - the value of the variable
  Throws:
    `SAXException` - if the variable is already declared

### setExecuting

    public void setExecuting(Binding binding,
                             boolean executing)
                      throws XPathException

  Set/Unset a flag to indicate that a particular global variable is currently being evaluated.
  Throws:
    `XPathException` - If an attempt is made to set the flag when it is already set, this means the definition of the variable is circular.

### isEvaluated

    public boolean isEvaluated(Binding binding)

  Test if global variable has already been evaluated

### allocateLocals

    public void allocateLocals(int n)

  Define how many slots are needed for local variables. We work on the basis of "one size fits all": all stackframes are allocated as large as the largest one needed

### openStackFrame

    public void openStackFrame(ParameterSet localParameters)

  Start a new stack frame for local variables

### closeStackFrame

    public void closeStackFrame()

  Close the current stack frame for local variables

### useLocalParameter

    public boolean useLocalParameter(int fingerprint,
                                     Binding binding)

  Use local parameter. This is called when a local xsl:param element is processed. If a parameter of the relevant name was supplied, it is bound to the xsl:param element. Otherwise the method returns false, so the xsl:param default will be evaluated
  Parameters:
    `fingerprint` - The fingerprint of the parameter name
    `binding` - The XSLParam element to bind its value to
  Returns:
    true if a parameter of this name was supplied, false if not

### getLocalParameter

    public Value getLocalParameter(int fingerprint)

  Get local parameter. This method is available to user-written node handlers invoked via the saxon:handler interface, it allows them to retrieve the values of parameters set up within a calling XSL template.
  Returns:
    The value of the parameter, or null if not supplied

### defineLocalVariable

    public void defineLocalVariable(Binding binding,
                                    Value value)

  Define local variable
  Parameters:
    `name` - the name of the variable
    `value` - the value of the variable

### getValue

    public Value getValue(Binding binding)

  Get the value of a variable
  Parameters:
    `binding` - the Binding that establishes the unique instance of the variable
  Returns:
    the Value of the variable if defined, null otherwise.

### getValue

    public Value getValue(Binding binding,
                          int frameId)

  Get the value of a variable in the given frame
  Parameters:
    `binding` - the Binding that establishes the unique instance of the variable
    `frameId` - the id of the frame, see getFrameId
  Returns:
    the Value of the variable if defined, null otherwise.

### getFrameId

    public int getFrameId()

  Get the id of the current frame.
  Returns:
    an id, that may be given to getValue(Binding,int)

### assignVariable

    public void assignVariable(Binding binding,
                               Value value)

  Assign a new value to a variable
  Parameters:
    `name` - the name of the local or global variable or parameter (without a $ sign)
  Returns:
    the Value of the variable
  Throws:
    `SAXException` - if the variable has not been declared