// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // builtin-fmt.go package expr import ( "fmt" "io" "os" ) func getStdout(ctx ExprContext) io.Writer { var w io.Writer if wany, exists := ctx.GetVar(ControlStdout); exists && wany != nil { w, _ = wany.(io.Writer) } if w == nil { w = os.Stdout } return w } func printFunc(ctx ExprContext, name string, args map[string]any) (result any, err error) { var n int = 0 if v, exists := args[ParamItem]; exists && v != nil { argv := v.([]any) n, err = fmt.Fprint(getStdout(ctx), argv...) } result = int64(n) return } func printLnFunc(ctx ExprContext, name string, args map[string]any) (result any, err error) { var n int = 0 if v, exists := args[ParamItem]; exists && v != nil { argv := v.([]any) n, err = fmt.Fprintln(getStdout(ctx), argv...) } else { n, err = fmt.Fprintln(getStdout(ctx)) } result = int64(n) return } func ImportFmtFuncs(ctx ExprContext) { ctx.RegisterFunc("print", NewGolangFunctor(printFunc), TypeInt, []ExprFuncParam{ NewFuncParamFlag(ParamItem, PfRepeat), }) ctx.RegisterFunc("println", NewGolangFunctor(printLnFunc), TypeInt, []ExprFuncParam{ NewFuncParamFlag(ParamItem, PfRepeat), }) } func init() { RegisterBuiltinModule("fmt", ImportFmtFuncs, "String and console formatting functions") }