Documentation
¶
Index ¶
- Constants
- Variables
- func ApplyFunctionGIL(ctx context.Context, fn object.Object, args []object.Object, ...) object.Object
- func ContextWithCallDepth(ctx context.Context, maxDepth int) context.Context
- func ContextWithSourceFile(ctx context.Context, filename string) context.Context
- func Eval(node ast.Node, env *object.Environment) object.Object
- func EvalWithContext(ctx context.Context, node ast.Node, env *object.Environment) object.Object
- func GetEnvFromContext(ctx context.Context) *object.Environment
- func GetImportBuiltin() *object.Builtin
- func GetSourceFileFromContext(ctx context.Context) string
- func SetCallDepthInContext(ctx context.Context, cd *CallDepth) context.Context
- func SetEnvInContext(ctx context.Context, env *object.Environment) context.Context
- func WithEvaluator(ctx context.Context) context.Context
- type CallDepth
Constants ¶
const DefaultMaxCallDepth = 1000
DefaultMaxCallDepth is the default maximum call depth (1000)
Variables ¶
var ( NULL = &object.Null{} TRUE = object.NewBoolean(true) FALSE = object.NewBoolean(false) )
Functions ¶
func ApplyFunctionGIL ¶ added in v0.15.0
func ApplyFunctionGIL(ctx context.Context, fn object.Object, args []object.Object, keywords map[string]object.Object, env *object.Environment) object.Object
applyFunction calls a function object with arguments and keyword arguments.
It is unexported because it does NOT acquire the interpreter lock: it is the internal dispatch used while the lock is already held (dunder-method dispatch, recursion, etc.). The locking boundaries are EvalWithContext, ApplyFunctionGIL, and the evaliface adapter (CallFunction/CallObjectFunction/CallMethod). Go callers outside the evaluator package must use ApplyFunctionGIL.
ApplyFunctionGIL acquires the environment's interpreter lock (reentrant via goroutine-id ownership, so nested calls from the same goroutine don't deadlock) and then dispatches via applyFunction. Host code that calls script functions — especially concurrently against a shared environment — must use this rather than the unexported applyFunction, which assumes the lock is held.
func ContextWithCallDepth ¶
ContextWithCallDepth creates a context with a call depth tracker
func ContextWithSourceFile ¶
ContextWithSourceFile creates a context with source file info for error reporting
func EvalWithContext ¶
EvalWithContext executes with context for timeout/cancellation
func GetEnvFromContext ¶
func GetEnvFromContext(ctx context.Context) *object.Environment
GetEnvFromContext retrieves environment from context for external functions
func GetImportBuiltin ¶
func GetSourceFileFromContext ¶
GetSourceFileFromContext retrieves source file name from context
func SetCallDepthInContext ¶
SetCallDepthInContext stores call depth tracker in context
func SetEnvInContext ¶
SetEnvInContext stores environment in context for builtin functions
Types ¶
type CallDepth ¶
type CallDepth struct {
// contains filtered or unexported fields
}
CallDepth tracks function call depth to prevent stack overflow
func GetCallDepthFromContext ¶
GetCallDepthFromContext retrieves call depth tracker from context
func NewCallDepth ¶
NewCallDepth creates a new CallDepth tracker with the specified max depth