github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/management/debug.go (about) 1 package management 2 3 import ( 4 "fmt" 5 6 "github.com/lmorg/murex/debug" 7 "github.com/lmorg/murex/lang" 8 "github.com/lmorg/murex/lang/types" 9 "github.com/lmorg/murex/utils/json" 10 ) 11 12 func init() { 13 lang.DefineMethod("debug", cmdDebug, types.Any, types.Json) 14 } 15 16 func cmdDebug(p *lang.Process) error { 17 if p.IsMethod { 18 return cmdDebugMethod(p) 19 } 20 21 block, err := p.Parameters.Block(0) 22 if err == nil { 23 return cmdDebugBlock(p, block) 24 } 25 26 p.Stdout.SetDataType(types.Boolean) 27 28 v, err := p.Parameters.Bool(0) 29 30 if err != nil { 31 _, err = p.Stdout.Write([]byte(fmt.Sprint(debug.Enabled))) 32 return err 33 } 34 debug.Enabled = v 35 if !v { 36 p.Stdout.Writeln(types.FalseByte) 37 p.ExitNum = 1 38 return nil 39 } 40 41 _, err = p.Stdout.Writeln(types.TrueByte) 42 return err 43 } 44 45 func cmdDebugMethod(p *lang.Process) error { 46 dt := p.Stdin.GetDataType() 47 p.Stdout.SetDataType(types.Json) 48 49 var ( 50 j = make(map[string]interface{}) 51 b []byte 52 ) 53 54 obj, err := lang.UnmarshalData(p, dt) 55 56 j["Process"] = p.Previous.Dump() 57 j["Data-Type"] = map[string]string{ 58 "Murex": dt, 59 "Go": fmt.Sprintf("%T", obj), 60 "UnmarshalData Err": fmt.Sprint(err), 61 } 62 63 b, err = json.Marshal(j, p.Stdout.IsTTY()) 64 if err != nil { 65 return err 66 } 67 68 _, err = p.Stdout.Writeln(b) 69 return err 70 } 71 72 func cmdDebugBlock(p *lang.Process, block []rune) (err error) { 73 v := debug.Enabled 74 debug.Enabled = true 75 defer func() { 76 debug.Enabled = v 77 }() 78 79 fork := p.Fork(lang.F_NO_STDIN) 80 p.ExitNum, err = fork.Execute(block) 81 return 82 }