diff --git a/dev/ast/node_test.go b/dev/ast/node_test.go index 9dc298ef4..c3cc5abfc 100644 --- a/dev/ast/node_test.go +++ b/dev/ast/node_test.go @@ -24,10 +24,25 @@ func getSample(width int, depth int) string { return string(js) } + func TestNodeParse(t *testing.T) { - n1, err := NewParser(`[1,"1",true]`).Parse() + n1, err := NewParser(`[1,"1",true,null]`).Parse() + require.NoError(t, err) + require.Equal(t, len(n1.Kids), 4) + + n1, err = NewParser(`[]`).Parse() + require.NoError(t, err) + require.Equal(t, len(n1.Kids), 0) + + n1, err = NewParser(`{}`).Parse() + require.NoError(t, err) + require.Equal(t, len(n1.Kids), 0) + + n1, err = NewParser(`{"key": null, "k2": {}}`).Parse() require.NoError(t, err) spew.Dump(n1.Kids, len(n1.Kids)) + require.Equal(t, len(n1.Kids), 4) + src := getSample(100, 0) n, err := NewParser(src).Parse() require.NoError(t, err) diff --git a/go.work.sum b/go.work.sum index 450f9431c..be046ae78 100644 --- a/go.work.sum +++ b/go.work.sum @@ -111,6 +111,7 @@ github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3K github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= @@ -405,6 +406,7 @@ golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2F golang.org/x/exp/typeparams v0.0.0-20221002003631-540bb7301a08/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230213192124-5e25df0256eb/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= diff --git a/internal/native/avx/native_text_amd64.go b/internal/native/avx/native_text_amd64.go index 1d6062175..6370a302b 100644 --- a/internal/native/avx/native_text_amd64.go +++ b/internal/native/avx/native_text_amd64.go @@ -9712,7 +9712,7 @@ var Text__native_entry__ = []byte{ 0x0f, 0x85, 0xa9, 0x12, 0x00, 0x00, //0x00008fb6 jne LBB35_594 0x48, 0x8b, 0x7c, 0x24, 0x28, //0x00008fbc movq $40(%rsp), %rdi 0xc6, 0x07, 0x04, //0x00008fc1 movb $4, (%rdi) - 0x49, 0x83, 0xc6, 0x06, //0x00008fc4 addq $6, %r14 + 0x49, 0x83, 0xc6, 0x05, //0x00008fc4 addq $5, %r14 0xe9, 0x75, 0x00, 0x00, 0x00, //0x00008fc8 jmp LBB35_371 //0x00008fcd LBB35_360 0x49, 0x8d, 0x56, 0x03, //0x00008fcd leaq $3(%r14), %rdx @@ -9740,7 +9740,7 @@ var Text__native_entry__ = []byte{ 0x48, 0x8b, 0x7c, 0x24, 0x28, //0x00009036 movq $40(%rsp), %rdi 0xc6, 0x07, 0x03, //0x0000903b movb $3, (%rdi) //0x0000903e LBB35_370 - 0x49, 0x83, 0xc6, 0x05, //0x0000903e addq $5, %r14 + 0x49, 0x83, 0xc6, 0x04, //0x0000903e addq $4, %r14 //0x00009042 LBB35_371 0x4d, 0x89, 0x31, //0x00009042 movq %r14, (%r9) 0x4c, 0x89, 0xf0, //0x00009045 movq %r14, %rax @@ -10558,7 +10558,7 @@ var Text__native_entry__ = []byte{ 0x0f, 0x85, 0xd5, 0x05, 0x00, 0x00, //0x00009c8a jne LBB35_594 0x48, 0x8b, 0x7c, 0x24, 0x50, //0x00009c90 movq $80(%rsp), %rdi 0xc6, 0x07, 0x04, //0x00009c95 movb $4, (%rdi) - 0x49, 0x83, 0xc6, 0x06, //0x00009c98 addq $6, %r14 + 0x49, 0x83, 0xc6, 0x05, //0x00009c98 addq $5, %r14 0xe9, 0x7d, 0x00, 0x00, 0x00, //0x00009c9c jmp LBB35_521 //0x00009ca1 LBB35_510 0x49, 0x8d, 0x56, 0x03, //0x00009ca1 leaq $3(%r14), %rdx @@ -10588,7 +10588,7 @@ var Text__native_entry__ = []byte{ 0x48, 0x8b, 0x7c, 0x24, 0x50, //0x00009d12 movq $80(%rsp), %rdi 0xc6, 0x07, 0x03, //0x00009d17 movb $3, (%rdi) //0x00009d1a LBB35_520 - 0x49, 0x83, 0xc6, 0x05, //0x00009d1a addq $5, %r14 + 0x49, 0x83, 0xc6, 0x04, //0x00009d1a addq $4, %r14 //0x00009d1e LBB35_521 0x4d, 0x89, 0x31, //0x00009d1e movq %r14, (%r9) 0x4c, 0x89, 0xf0, //0x00009d21 movq %r14, %rax diff --git a/internal/native/avx2/native_text_amd64.go b/internal/native/avx2/native_text_amd64.go index 11dbf2bb9..9f76202cb 100644 --- a/internal/native/avx2/native_text_amd64.go +++ b/internal/native/avx2/native_text_amd64.go @@ -9772,7 +9772,7 @@ var Text__native_entry__ = []byte{ 0x80, 0x3c, 0x01, 0x65, //0x0000939e cmpb $101, (%rcx,%rax) 0x0f, 0x85, 0x10, 0x0f, 0x00, 0x00, //0x000093a2 jne LBB36_308 0x41, 0xc6, 0x45, 0x00, 0x04, //0x000093a8 movb $4, (%r13) - 0x49, 0x83, 0xc7, 0x05, //0x000093ad addq $5, %r15 + 0x49, 0x83, 0xc7, 0x04, //0x000093ad addq $4, %r15 0xe9, 0x85, 0x00, 0x00, 0x00, //0x000093b1 jmp LBB36_150 //0x000093b6 LBB36_139 0x49, 0x8d, 0x47, 0x02, //0x000093b6 leaq $2(%r15), %rax @@ -9802,7 +9802,7 @@ var Text__native_entry__ = []byte{ 0x0f, 0x85, 0x86, 0x0e, 0x00, 0x00, //0x0000942c jne LBB36_308 0x41, 0xc6, 0x45, 0x00, 0x03, //0x00009432 movb $3, (%r13) //0x00009437 LBB36_149 - 0x49, 0x83, 0xc7, 0x04, //0x00009437 addq $4, %r15 + 0x49, 0x83, 0xc7, 0x03, //0x00009437 addq $3, %r15 //0x0000943b LBB36_150 0x4d, 0x89, 0x3c, 0x24, //0x0000943b movq %r15, (%r12) 0x4d, 0x89, 0xfe, //0x0000943f movq %r15, %r14 @@ -10451,7 +10451,7 @@ var Text__native_entry__ = []byte{ 0x80, 0x3c, 0x01, 0x65, //0x00009e12 cmpb $101, (%rcx,%rax) 0x0f, 0x85, 0x9c, 0x04, 0x00, 0x00, //0x00009e16 jne LBB36_308 0x41, 0xc6, 0x45, 0x00, 0x04, //0x00009e1c movb $4, (%r13) - 0x49, 0x83, 0xc7, 0x05, //0x00009e21 addq $5, %r15 + 0x49, 0x83, 0xc7, 0x04, //0x00009e21 addq $4, %r15 0xe9, 0x85, 0x00, 0x00, 0x00, //0x00009e25 jmp LBB36_269 //0x00009e2a LBB36_258 0x49, 0x8d, 0x47, 0x02, //0x00009e2a leaq $2(%r15), %rax @@ -10481,7 +10481,7 @@ var Text__native_entry__ = []byte{ 0x0f, 0x85, 0x12, 0x04, 0x00, 0x00, //0x00009ea0 jne LBB36_308 0x41, 0xc6, 0x45, 0x00, 0x03, //0x00009ea6 movb $3, (%r13) //0x00009eab LBB36_268 - 0x49, 0x83, 0xc7, 0x04, //0x00009eab addq $4, %r15 + 0x49, 0x83, 0xc7, 0x03, //0x00009eab addq $3, %r15 //0x00009eaf LBB36_269 0x4d, 0x89, 0x3c, 0x24, //0x00009eaf movq %r15, (%r12) 0x4d, 0x89, 0xfe, //0x00009eb3 movq %r15, %r14 diff --git a/internal/native/sse/native_text_amd64.go b/internal/native/sse/native_text_amd64.go index 3a72cdd84..e7904b35c 100644 --- a/internal/native/sse/native_text_amd64.go +++ b/internal/native/sse/native_text_amd64.go @@ -9895,7 +9895,7 @@ var Text__native_entry__ = []byte{ 0x0f, 0x85, 0x41, 0x15, 0x00, 0x00, //0x000091b7 jne LBB35_593 0x48, 0x8b, 0x75, 0xb0, //0x000091bd movq $-80(%rbp), %rsi 0xc6, 0x06, 0x04, //0x000091c1 movb $4, (%rsi) - 0x49, 0x83, 0xc5, 0x06, //0x000091c4 addq $6, %r13 + 0x49, 0x83, 0xc5, 0x05, //0x000091c4 addq $5, %r13 0xe9, 0x73, 0x00, 0x00, 0x00, //0x000091c8 jmp LBB35_370 //0x000091cd LBB35_359 0x49, 0x8d, 0x55, 0x03, //0x000091cd leaq $3(%r13), %rdx @@ -9923,7 +9923,7 @@ var Text__native_entry__ = []byte{ 0x48, 0x8b, 0x75, 0xb0, //0x00009235 movq $-80(%rbp), %rsi 0xc6, 0x06, 0x03, //0x00009239 movb $3, (%rsi) //0x0000923c LBB35_369 - 0x49, 0x83, 0xc5, 0x05, //0x0000923c addq $5, %r13 + 0x49, 0x83, 0xc5, 0x04, //0x0000923c addq $4, %r13 //0x00009240 LBB35_370 0x4d, 0x89, 0x28, //0x00009240 movq %r13, (%r8) 0x4c, 0x89, 0xe8, //0x00009243 movq %r13, %rax @@ -10833,7 +10833,7 @@ var Text__native_entry__ = []byte{ 0x0f, 0x85, 0xbe, 0x06, 0x00, 0x00, //0x0000a03a jne LBB35_593 0x48, 0x8b, 0x75, 0xa0, //0x0000a040 movq $-96(%rbp), %rsi 0xc6, 0x06, 0x04, //0x0000a044 movb $4, (%rsi) - 0x49, 0x83, 0xc5, 0x06, //0x0000a047 addq $6, %r13 + 0x49, 0x83, 0xc5, 0x05, //0x0000a047 addq $5, %r13 0xe9, 0x79, 0x00, 0x00, 0x00, //0x0000a04b jmp LBB35_515 //0x0000a050 LBB35_504 0x49, 0x8d, 0x55, 0x03, //0x0000a050 leaq $3(%r13), %rdx @@ -10863,7 +10863,7 @@ var Text__native_entry__ = []byte{ 0x48, 0x8b, 0x75, 0xa0, //0x0000a0be movq $-96(%rbp), %rsi 0xc6, 0x06, 0x03, //0x0000a0c2 movb $3, (%rsi) //0x0000a0c5 LBB35_514 - 0x49, 0x83, 0xc5, 0x05, //0x0000a0c5 addq $5, %r13 + 0x49, 0x83, 0xc5, 0x04, //0x0000a0c5 addq $4, %r13 //0x0000a0c9 LBB35_515 0x4d, 0x89, 0x28, //0x0000a0c9 movq %r13, (%r8) 0x4c, 0x89, 0xe8, //0x0000a0cc movq %r13, %rax diff --git a/native/scanning.c b/native/scanning.c index 7c5611fd1..45bd79388 100644 --- a/native/scanning.c +++ b/native/scanning.c @@ -2106,7 +2106,7 @@ static always_inline long load_lazy(const GoString *src, long *p, Node* node) { } if (src->buf[i] == 'r' && src->buf[i + 1] == 'u' && src->buf[i + 2] == 'e') { visit_bool(kind, true); - *p = i + 4; + *p = i + 3; } else { return -ERR_INVAL; } @@ -2118,7 +2118,7 @@ static always_inline long load_lazy(const GoString *src, long *p, Node* node) { } if (src->buf[i] == 'a' && src->buf[i + 1] == 'l' && src->buf[i + 2] == 's' && src->buf[i + 3] == 'e') { visit_bool(kind, false); - *p = i + 5; + *p = i + 4; } else { return -ERR_INVAL; } @@ -2130,7 +2130,7 @@ static always_inline long load_lazy(const GoString *src, long *p, Node* node) { } if (src->buf[i] == 'u' && src->buf[i + 1] == 'l' && src->buf[i + 2] == 'l') { visit_null(kind); - *p = i + 4; + *p = i + 3; } else { return -ERR_INVAL; } @@ -2205,6 +2205,7 @@ static always_inline long load_lazy(const GoString *src, long *p, Node* node) { case '}': case ']': { is_end = true; node->tape.len = kcnt; + xprintf("len is %d", kcnt); break; } default: {