An optional name, used in debugging output if present.
An optional name, used in debugging output if present.
Add a new partial function to the definition of this attribute.
Add a new partial function to the definition of this attribute. Resets the memo table for this attribute.
Remove a partial function from the definition of this attribute, if it's there, otherwise have no effect.
Remove a partial function from the definition of this attribute, if it's
there, otherwise have no effect. If g appears more than once in the
definition, just remove the first one. Resets the memo table for this
attribute.
Return the value of this attribute for node t, raising an error if
it depends on itself.
Return the value of this attribute for node t, raising an error if
it depends on itself. IF the value has been memoised, return it.
Otherwise, the functions list is tried in order. The first partial
function on that list that is defined will be used. If no partial
function on this list is defined, then f will be used.
Execute a block and restore the state of this dynamic attribute after the block has executed.
Execute a block and restore the state of this dynamic attribute after the block has executed. The idea is that the block can add to the definition of the attribute for use within the block. Any definitions that are added will be automatically removed at the end of the block.
List of functions that currently dynamically define this attribute.
Has the value of this attribute at t already been computed or not?
Has the value of this attribute at t already been computed or not?
The memo table for this attribute, with memo(t) == Some(v) represents
the node t having the value v for this attribute.
The memo table for this attribute, with memo(t) == Some(v) represents
the node t having the value v for this attribute. memo(t) = None
means that the attribute for t is currently being evaluated. Note that
the memo table needs to be some form of identity map so that value equal
trees are not treated as equal unless they are actually the same reference.
The current version number of the memo table.
The current version number of the memo table.
Report a cycle in the calculation of this attribute discovered when
evaluating the attribute on value t.
Report a cycle in the calculation of this attribute discovered when
evaluating the attribute on value t. Throws an IllegalStateException.
Immediately reset this attribute's memoisation cache.
Immediately reset this attribute's memoisation cache.
A cached dynamic attribute of a node type
Twith value of typeU, supported by a memo table and circularity test. The value of the attribute is initially computed by the functionf, but the definition can be augmented dynamically. The result is memoised so that it is only evaluated once for a given definition. The attribute definition should not itself require the value of this attribute. If it does, a circularity error is reported by throwing anIllegalStateException.