diff options
Diffstat (limited to 'starlark/debug.go')
-rw-r--r-- | starlark/debug.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/starlark/debug.go b/starlark/debug.go new file mode 100644 index 0000000..22a2124 --- /dev/null +++ b/starlark/debug.go @@ -0,0 +1,42 @@ +package starlark + +import "go.starlark.net/syntax" + +// This file defines an experimental API for the debugging tools. +// Some of these declarations expose details of internal packages. +// (The debugger makes liberal use of exported fields of unexported types.) +// Breaking changes may occur without notice. + +// Local returns the value of the i'th local variable. +// It may be nil if not yet assigned. +// +// Local may be called only for frames whose Callable is a *Function (a +// function defined by Starlark source code), and only while the frame +// is active; it will panic otherwise. +// +// This function is provided only for debugging tools. +// +// THIS API IS EXPERIMENTAL AND MAY CHANGE WITHOUT NOTICE. +func (fr *frame) Local(i int) Value { return fr.locals[i] } + +// DebugFrame is the debugger API for a frame of the interpreter's call stack. +// +// Most applications have no need for this API; use CallFrame instead. +// +// Clients must not retain a DebugFrame nor call any of its methods once +// the current built-in call has returned or execution has resumed +// after a breakpoint as this may have unpredictable effects, including +// but not limited to retention of object that would otherwise be garbage. +type DebugFrame interface { + Callable() Callable // returns the frame's function + Local(i int) Value // returns the value of the (Starlark) frame's ith local variable + Position() syntax.Position // returns the current position of execution in this frame +} + +// DebugFrame returns the debugger interface for +// the specified frame of the interpreter's call stack. +// Frame numbering is as for Thread.CallFrame. +// +// This function is intended for use in debugging tools. +// Most applications should have no need for it; use CallFrame instead. +func (thread *Thread) DebugFrame(depth int) DebugFrame { return thread.frameAt(depth) } |