diff options
Diffstat (limited to 'vendor/github.com/bytedance/sonic/ast/decode.go')
| -rw-r--r-- | vendor/github.com/bytedance/sonic/ast/decode.go | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/vendor/github.com/bytedance/sonic/ast/decode.go b/vendor/github.com/bytedance/sonic/ast/decode.go index 135ee6eb8..45f5e2d2b 100644 --- a/vendor/github.com/bytedance/sonic/ast/decode.go +++ b/vendor/github.com/bytedance/sonic/ast/decode.go @@ -25,10 +25,9 @@ import ( "github.com/bytedance/sonic/internal/native/types" "github.com/bytedance/sonic/internal/rt" "github.com/bytedance/sonic/internal/utils" + "github.com/bytedance/sonic/unquote" ) -// Hack: this is used for both checking space and cause friendly compile errors in 32-bit arch. -const _Sonic_Not_Support_32Bit_Arch__Checking_32Bit_Arch_Here = (1 << ' ') | (1 << '\t') | (1 << '\r') | (1 << '\n') var bytesNull = []byte("null") @@ -40,17 +39,13 @@ const ( bytesArray = "[]" ) -func isSpace(c byte) bool { - return (int(1<<c) & _Sonic_Not_Support_32Bit_Arch__Checking_32Bit_Arch_Here) != 0 -} - //go:nocheckptr func skipBlank(src string, pos int) int { se := uintptr(rt.IndexChar(src, len(src))) sp := uintptr(rt.IndexChar(src, pos)) for sp < se { - if !isSpace(*(*byte)(unsafe.Pointer(sp))) { + if !utils.IsSpace(*(*byte)(unsafe.Pointer(sp))) { break } sp += 1 @@ -107,13 +102,13 @@ func decodeString(src string, pos int) (ret int, v string) { return ret, v } - vv, ok := unquoteBytes(rt.Str2Mem(src[pos:ret])) - if !ok { + result, err := unquote.String(src[pos:ret]) + if err != 0 { return -int(types.ERR_INVALID_CHAR), "" } runtime.KeepAlive(src) - return ret, rt.Mem2Str(vv) + return ret, result } func decodeBinary(src string, pos int) (ret int, v []byte) { @@ -549,7 +544,7 @@ func _DecodeString(src string, pos int, needEsc bool, validStr bool) (v string, return str, p.p, true } /* unquote the string */ - out, err := unquote(str) + out, err := unquote.String(str) /* check for errors */ if err != 0 { return "", -int(err), true |
