// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // context-helpers.go package expr func cloneContext(sourceCtx ExprContext) (clonedCtx ExprContext) { if sourceCtx != nil { clonedCtx = sourceCtx.Clone() } return } func exportVar(ctx ExprContext, name string, value any) { if name[0] == '@' { name = name[1:] } ctx.UnsafeSetVar(name, value) } func exportFunc(ctx ExprContext, name string, info ExprFunc) { if name[0] == '@' { name = name[1:] } // ctx.RegisterFunc(name, info.Functor(), info.MinArgs(), info.MaxArgs()) // ctx.RegisterFuncInfo(name, info) ctx.RegisterFunc(name, info.Functor(), info.ReturnType(), info.Params()) } func exportObjects(destCtx, sourceCtx ExprContext) { exportAll := isEnabled(sourceCtx, control_export_all) // fmt.Printf("Exporting from sourceCtx [%p] to destCtx [%p] -- exportAll=%t\n", sourceCtx, destCtx, exportAll) // Export variables for _, refName := range sourceCtx.EnumVars(func(name string) bool { return exportAll || name[0] == '@' }) { // fmt.Printf("\tExporting %q\n", refName) refValue, _ := sourceCtx.GetVar(refName) exportVar(destCtx, refName, refValue) } // Export functions for _, refName := range sourceCtx.EnumFuncs(func(name string) bool { return exportAll || name[0] == '@' }) { if info, _ := sourceCtx.GetFuncInfo(refName); info != nil { exportFunc(destCtx, refName, info) } } }