Skip to content

Commit

Permalink
Merge pull request #226 from goccy/feature/refactor-debug-vm
Browse files Browse the repository at this point in the history
Refactor Debug mode for encoding
  • Loading branch information
goccy committed May 18, 2021
2 parents bbea516 + aee5d8a commit 761b608
Show file tree
Hide file tree
Showing 11 changed files with 136 additions and 5,242 deletions.
20 changes: 18 additions & 2 deletions encode.go
Expand Up @@ -6,7 +6,6 @@ import (

"github.com/goccy/go-json/internal/encoder"
"github.com/goccy/go-json/internal/encoder/vm"
"github.com/goccy/go-json/internal/encoder/vm_debug"
"github.com/goccy/go-json/internal/encoder/vm_escaped"
"github.com/goccy/go-json/internal/encoder/vm_escaped_indent"
"github.com/goccy/go-json/internal/encoder/vm_indent"
Expand Down Expand Up @@ -250,19 +249,36 @@ func encodeIndent(ctx *encoder.RuntimeContext, v interface{}, prefix, indent str

func encodeRunCode(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt EncodeOption) ([]byte, error) {
if (opt & EncodeOptionDebug) != 0 {
return vm_debug.Run(ctx, b, codeSet, encoder.Option(opt))
return encodeDebugRunCode(ctx, b, codeSet, opt)
}
if (opt & EncodeOptionHTMLEscape) != 0 {
return vm_escaped.Run(ctx, b, codeSet, encoder.Option(opt))
}
return vm.Run(ctx, b, codeSet, encoder.Option(opt))
}

func encodeDebugRunCode(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt EncodeOption) ([]byte, error) {
if (opt & EncodeOptionHTMLEscape) != 0 {
return vm_escaped.DebugRun(ctx, b, codeSet, encoder.Option(opt))
}
return vm.DebugRun(ctx, b, codeSet, encoder.Option(opt))
}

func encodeRunIndentCode(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, prefix, indent string, opt EncodeOption) ([]byte, error) {
ctx.Prefix = []byte(prefix)
ctx.IndentStr = []byte(indent)
if (opt & EncodeOptionDebug) != 0 {
return encodeDebugRunIndentCode(ctx, b, codeSet, opt)
}
if (opt & EncodeOptionHTMLEscape) != 0 {
return vm_escaped_indent.Run(ctx, b, codeSet, encoder.Option(opt))
}
return vm_indent.Run(ctx, b, codeSet, encoder.Option(opt))
}

func encodeDebugRunIndentCode(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt EncodeOption) ([]byte, error) {
if (opt & EncodeOptionHTMLEscape) != 0 {
return vm_escaped_indent.DebugRun(ctx, b, codeSet, encoder.Option(opt))
}
return vm_indent.DebugRun(ctx, b, codeSet, encoder.Option(opt))
}
27 changes: 27 additions & 0 deletions internal/encoder/vm/debug_vm.go
@@ -0,0 +1,27 @@
package vm

import (
"fmt"

"github.com/goccy/go-json/internal/encoder"
)

func DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt encoder.Option) ([]byte, error) {
defer func() {
if err := recover(); err != nil {
fmt.Println("=============[DEBUG]===============")
fmt.Println("* [TYPE]")
fmt.Println(codeSet.Type)
fmt.Printf("\n")
fmt.Println("* [ALL OPCODE]")
fmt.Println(codeSet.Code.Dump())
fmt.Printf("\n")
fmt.Println("* [CONTEXT]")
fmt.Printf("%+v\n", ctx)
fmt.Println("===================================")
panic(err)
}
}()

return Run(ctx, b, codeSet, opt)
}
4 changes: 2 additions & 2 deletions internal/encoder/vm/hack.go
Expand Up @@ -2,8 +2,8 @@ package vm

import (
// HACK: compile order
// `vm`, `vm_escaped`, `vm_indent`, `vm_escaped_indent`, `vm_debug` packages uses a lot of memory to compile,
// `vm`, `vm_escaped`, `vm_indent`, `vm_escaped_indent` packages uses a lot of memory to compile,
// so forcibly make dependencies and avoid compiling in concurrent.
// dependency order: vm => vm_escaped => vm_indent => vm_escaped_indent => vm_debug
// dependency order: vm => vm_escaped => vm_indent => vm_escaped_indent
_ "github.com/goccy/go-json/internal/encoder/vm_escaped"
)
215 changes: 0 additions & 215 deletions internal/encoder/vm_debug/util.go

This file was deleted.

0 comments on commit 761b608

Please sign in to comment.