summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/ast/iterator.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/ast/iterator.go')
-rw-r--r--vendor/github.com/bytedance/sonic/ast/iterator.go14
1 files changed, 11 insertions, 3 deletions
diff --git a/vendor/github.com/bytedance/sonic/ast/iterator.go b/vendor/github.com/bytedance/sonic/ast/iterator.go
index 3c4187a9c..64e1e5a90 100644
--- a/vendor/github.com/bytedance/sonic/ast/iterator.go
+++ b/vendor/github.com/bytedance/sonic/ast/iterator.go
@@ -32,7 +32,11 @@ func (self *Node) Values() (ListIterator, error) {
if err := self.should(types.V_ARRAY, "an array"); err != nil {
return ListIterator{}, err
}
- return ListIterator{Iterator{p: self}}, nil
+ return self.values(), nil
+}
+
+func (self *Node) values() ListIterator {
+ return ListIterator{Iterator{p: self}}
}
// Properties returns iterator for object's children traversal
@@ -40,7 +44,11 @@ func (self *Node) Properties() (ObjectIterator, error) {
if err := self.should(types.V_OBJECT, "an object"); err != nil {
return ObjectIterator{}, err
}
- return ObjectIterator{Iterator{p: self}}, nil
+ return self.properties(), nil
+}
+
+func (self *Node) properties() ObjectIterator {
+ return ObjectIterator{Iterator{p: self}}
}
type Iterator struct {
@@ -114,7 +122,7 @@ next_start:
} else {
n := self.p.pairAt(self.i)
self.i++
- if !n.Value.Exists() {
+ if n == nil || !n.Value.Exists() {
goto next_start
}
return n