github.com/goccy/go-json@v0.10.3-0.20240509105655-5e2ae3f23c1d/internal/encoder/vm_indent/debug_vm.go (about)

     1  package vm_indent
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/goccy/go-json/internal/encoder"
     7  )
     8  
     9  func DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {
    10  	var code *encoder.Opcode
    11  	if (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {
    12  		code = codeSet.EscapeKeyCode
    13  	} else {
    14  		code = codeSet.NoescapeKeyCode
    15  	}
    16  
    17  	defer func() {
    18  		if err := recover(); err != nil {
    19  			w := ctx.Option.DebugOut
    20  			fmt.Fprintln(w, "=============[DEBUG]===============")
    21  			fmt.Fprintln(w, "* [TYPE]")
    22  			fmt.Fprintln(w, codeSet.Type)
    23  			fmt.Fprintf(w, "\n")
    24  			fmt.Fprintln(w, "* [ALL OPCODE]")
    25  			fmt.Fprintln(w, code.Dump())
    26  			fmt.Fprintf(w, "\n")
    27  			fmt.Fprintln(w, "* [CONTEXT]")
    28  			fmt.Fprintf(w, "%+v\n", ctx)
    29  			fmt.Fprintln(w, "===================================")
    30  			panic(err)
    31  		}
    32  	}()
    33  
    34  	return Run(ctx, b, codeSet)
    35  }