The foregoing section on examining the program state provides a basic mechanism for walking around the state of a Concert program; however, often more intricate or more detailed view is needed. This is the purpose of the Concert Interpreter module of The Concert Debugger . The interpreter has two functions: to facilitate moving around and examining the program state in complex ways, and experimenting with different program strategies by interpreting code that implements them.
Expressions are interpreted in the environment of the current context; that is, all currently bound local variables are scoped and object locking works as if the interpreted expression was executed within the current context, so it inherits locks for invocations on syntactic self. If the current context is an object (see below for how this happens), the variable self is scoped, and the expression is considered a non-exclusive invocation on that object, so it runs regardless of locks on that object held by others.