Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 81a43a9

Browse files
authoredAug 10, 2023
Break Change: drop ast.Node API UnsafeArray() and UnsafeMap() (bytedance#498)
1 parent 007f4ff commit 81a43a9

8 files changed

+77
-71
lines changed
 

‎.github/workflows/compatibility_test-windows.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jobs:
66
build:
77
strategy:
88
matrix:
9-
go-version: [1.17.x, 1.20.x]
9+
go-version: [1.17.x, 1.21.x]
1010
runs-on: windows-latest
1111
steps:
1212
- uses: actions/checkout@v2

‎.github/workflows/compatibility_test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jobs:
66
build:
77
strategy:
88
matrix:
9-
go-version: [1.15.x, 1.16.x, 1.17.x, 1.18.x, 1.19.x, 1.20.x]
9+
go-version: [1.15.x, 1.16.x, 1.17.x, 1.18.x, 1.19.x, 1.20.x, 1.21.x]
1010
os: [arm, X64]
1111
runs-on: ${{ matrix.os }}
1212
steps:

‎.github/workflows/unit_test-linux-x64.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jobs:
66
build:
77
strategy:
88
matrix:
9-
go-version: [1.16.x, 1.17.x, 1.18.x, 1.19.x, 1.20.x]
9+
go-version: [1.16.x, 1.17.x, 1.18.x, 1.19.x, 1.20.x, 1.21.x]
1010
runs-on: [self-hosted, X64]
1111
steps:
1212
- name: Clear repository

‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ English | [中文](README_ZH_CN.md)
55
A blazingly fast JSON serializing & deserializing library, accelerated by JIT (just-in-time compiling) and SIMD (single-instruction-multiple-data).
66

77
## Requirement
8-
- Go 1.16~1.20
8+
- Go 1.16~1.21
99
- Linux / MacOS / Windows(need go1.17 above)
1010
- Amd64 ARCH
1111

‎ast/node.go

+18-18
Original file line numberDiff line numberDiff line change
@@ -821,15 +821,15 @@ func (self *Node) MapUseNode() (map[string]Node, error) {
821821
// WARN: don't use it unless you know what you are doing
822822
//
823823
// Deprecated: this API now returns copied nodes instead of directly reference,
824-
func (self *Node) UnsafeMap() ([]Pair, error) {
825-
if err := self.should(types.V_OBJECT, "an object"); err != nil {
826-
return nil, err
827-
}
828-
if err := self.skipAllKey(); err != nil {
829-
return nil, err
830-
}
831-
return self.toGenericObjectUsePair()
832-
}
824+
// func (self *Node) UnsafeMap() ([]Pair, error) {
825+
// if err := self.should(types.V_OBJECT, "an object"); err != nil {
826+
// return nil, err
827+
// }
828+
// if err := self.skipAllKey(); err != nil {
829+
// return nil, err
830+
// }
831+
// return self.toGenericObjectUsePair()
832+
// }
833833

834834
func (self *Node) unsafeMap() (*linkedPairs, error) {
835835
if err := self.should(types.V_OBJECT, "an object"); err != nil {
@@ -935,15 +935,15 @@ func (self *Node) ArrayUseNode() ([]Node, error) {
935935
//
936936
// Deprecated: this API now returns copied nodes instead of directly reference,
937937
// which has no difference with ArrayUseNode
938-
func (self *Node) UnsafeArray() ([]Node, error) {
939-
if err := self.should(types.V_ARRAY, "an array"); err != nil {
940-
return nil, err
941-
}
942-
if err := self.skipAllIndex(); err != nil {
943-
return nil, err
944-
}
945-
return self.toGenericArrayUseNode()
946-
}
938+
// func (self *Node) UnsafeArray() ([]Node, error) {
939+
// if err := self.should(types.V_ARRAY, "an array"); err != nil {
940+
// return nil, err
941+
// }
942+
// if err := self.skipAllIndex(); err != nil {
943+
// return nil, err
944+
// }
945+
// return self.toGenericArrayUseNode()
946+
// }
947947

948948
func (self *Node) unsafeArray() (*linkedNodes, error) {
949949
if err := self.should(types.V_ARRAY, "an array"); err != nil {

‎ast/node_test.go

+37-37
Original file line numberDiff line numberDiff line change
@@ -690,44 +690,44 @@ func TestUnset(t *testing.T) {
690690

691691
}
692692

693-
func TestUnsafeNode(t *testing.T) {
694-
str, loop := getTestIteratorSample(_DEFAULT_NODE_CAP)
695-
696-
root, err := NewSearcher(str).GetByPath("array")
697-
if err != nil {
698-
t.Fatal(err)
699-
}
700-
a, _ := root.UnsafeArray()
701-
if len(a) != loop {
702-
t.Fatalf("exp:%v, got:%v", loop, len(a))
703-
}
704-
for i := int64(0); i<int64(loop); i++{
705-
in := a[i]
706-
x, _ := in.Int64()
707-
if x != i {
708-
t.Fatalf("exp:%v, got:%v", i, x)
709-
}
710-
}
693+
// func TestUnsafeNode(t *testing.T) {
694+
// str, loop := getTestIteratorSample(_DEFAULT_NODE_CAP)
695+
696+
// root, err := NewSearcher(str).GetByPath("array")
697+
// if err != nil {
698+
// t.Fatal(err)
699+
// }
700+
// a, _ := root.UnsafeArray()
701+
// if len(a) != loop {
702+
// t.Fatalf("exp:%v, got:%v", loop, len(a))
703+
// }
704+
// for i := int64(0); i<int64(loop); i++{
705+
// in := a[i]
706+
// x, _ := in.Int64()
707+
// if x != i {
708+
// t.Fatalf("exp:%v, got:%v", i, x)
709+
// }
710+
// }
711711

712-
root, err = NewSearcher(str).GetByPath("object")
713-
if err != nil {
714-
t.Fatal(err)
715-
}
716-
b, _ := root.UnsafeMap()
717-
if len(b) != loop {
718-
t.Fatalf("exp:%v, got:%v", loop, len(b))
719-
}
720-
for i := int64(0); i<int64(loop); i++ {
721-
k := `k`+strconv.Itoa(int(i))
722-
if k != b[i].Key {
723-
t.Fatalf("unexpected element: %#v", b[i])
724-
}
725-
x, _ := b[i].Value.Int64()
726-
if x != i {
727-
t.Fatalf("exp:%v, got:%v", i, x)
728-
}
729-
}
730-
}
712+
// root, err = NewSearcher(str).GetByPath("object")
713+
// if err != nil {
714+
// t.Fatal(err)
715+
// }
716+
// b, _ := root.UnsafeMap()
717+
// if len(b) != loop {
718+
// t.Fatalf("exp:%v, got:%v", loop, len(b))
719+
// }
720+
// for i := int64(0); i<int64(loop); i++ {
721+
// k := `k`+strconv.Itoa(int(i))
722+
// if k != b[i].Key {
723+
// t.Fatalf("unexpected element: %#v", b[i])
724+
// }
725+
// x, _ := b[i].Value.Int64()
726+
// if x != i {
727+
// t.Fatalf("exp:%v, got:%v", i, x)
728+
// }
729+
// }
730+
// }
731731

732732
func TestUseNode(t *testing.T) {
733733
str, loop := getTestIteratorSample(_DEFAULT_NODE_CAP)

‎ast/visitor_test.go

+16-11
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,9 @@ func (self *visitorNodeDiffTest) OnObjectEnd() error {
216216
require.NotNil(self.t, object)
217217

218218
node := self.stk[self.sp-1].Node
219-
pairs, err := node.UnsafeMap()
219+
ps, err := node.unsafeMap()
220+
var pairs = make([]Pair, ps.Len())
221+
ps.ToSlice(pairs)
220222
require.NoError(self.t, err)
221223

222224
keysGot := make([]string, 0, len(object))
@@ -267,8 +269,10 @@ func (self *visitorNodeDiffTest) OnArrayEnd() error {
267269
require.NotNil(self.t, array)
268270

269271
node := self.stk[self.sp-1].Node
270-
values, err := node.UnsafeArray()
272+
vs, err := node.unsafeArray()
271273
require.NoError(self.t, err)
274+
var values = make([]Node, vs.Len())
275+
vs.ToSlice(values)
272276

273277
require.EqualValues(self.t, len(values), len(array))
274278

@@ -458,13 +462,14 @@ func (self *visitorUserNodeASTDecoder) decodeValue(root *Node) (visitorUserNode,
458462
value, ierr, ferr)
459463

460464
case V_ARRAY:
461-
nodes, err := root.UnsafeArray()
465+
nodes, err := root.unsafeArray()
462466
if err != nil {
463467
return nil, err
464468
}
465-
values := make([]visitorUserNode, len(nodes))
466-
for i := range nodes {
467-
value, err := self.decodeValue(&nodes[i])
469+
values := make([]visitorUserNode, nodes.Len())
470+
for i := 0; i<nodes.Len(); i++ {
471+
n := nodes.At(i)
472+
value, err := self.decodeValue(n)
468473
if err != nil {
469474
return nil, err
470475
}
@@ -473,17 +478,17 @@ func (self *visitorUserNodeASTDecoder) decodeValue(root *Node) (visitorUserNode,
473478
return &visitorUserArray{Value: values}, nil
474479

475480
case V_OBJECT:
476-
pairs, err := root.UnsafeMap()
481+
pairs, err := root.unsafeMap()
477482
if err != nil {
478483
return nil, err
479484
}
480-
values := make(map[string]visitorUserNode, len(pairs))
481-
for i := range pairs {
482-
value, err := self.decodeValue(&pairs[i].Value)
485+
values := make(map[string]visitorUserNode, pairs.Len())
486+
for i := 0; i < pairs.Len(); i++ {
487+
value, err := self.decodeValue(&pairs.At(i).Value)
483488
if err != nil {
484489
return nil, err
485490
}
486-
values[pairs[i].Key] = value
491+
values[pairs.At(i).Key] = value
487492
}
488493
return &visitorUserObject{Value: values}, nil
489494

‎.github/workflows/go_latest_test.yml ‎scripts/go_latest_test.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ jobs:
2525
2626
- name: script
2727
run: |
28-
sh ./scripts/go_latest.sh go1.21.0
28+
sh ./scripts/go_latest.sh master
29+

0 commit comments

Comments
 (0)
Please sign in to comment.