tree f4f6c43bdcd465797f6cd2ec64d8eec536df6793
parent 3f0a3703c02aaff109c1d5df37be01fee784d4fc
author Alan Donovan <adonovan@google.com> 1712857641 -0400
committer Alan Donovan <adonovan@google.com> 1712857641 -0400

starlark: add debug API for Locals and FreeVars

This change adds the following new API to allow debugging tools
and built-in functions access to the internals of Function values
and call frames:

package starlark

type Binding struct {
       Name string
       Pos  syntax.Position
}

func (fr *frame) NumLocals() int
func (fr *frame) Local(i int) (Binding, Value)

type DebugFrame interface {
    ...
    NumLocals() int
    Local(i int) (Binding, Value)
}

func (fn *Function) NumFreeVars() int
func (fn *Function) FreeVar(i int) (Binding, Value)

This is strictly a breaking change, but the changed functions
(the Local methods) were previously documented as experimental.
The fix is straightforward.

Also, a test of DebugFrame to write an 'env' function in
a similar vein to Python's 'dir' function.

Fixes #538
