@@ -166,33 +166,36 @@ func (p *Pointer) set(node, data any, nameProvider *jsonname.NameProvider) error
166166 )
167167 }
168168
169+ l := len (p .referenceTokens )
170+
169171 // full document when empty
170- if len ( p . referenceTokens ) == 0 {
172+ if l == 0 {
171173 return nil
172174 }
173175
174176 if nameProvider == nil {
175177 nameProvider = jsonname .DefaultJSONNameProvider
176178 }
177179
178- lastI := len (p .referenceTokens ) - 1
179- for i , token := range p .referenceTokens {
180- isLastToken := i == lastI
181- decodedToken := Unescape (token )
180+ var decodedToken string
181+ lastIndex := l - 1
182182
183- if isLastToken {
184- return setSingleImpl (node , data , decodedToken , nameProvider )
185- }
183+ if lastIndex > 0 { // skip if we only have one token in pointer
184+ for _ , token := range p .referenceTokens [:lastIndex ] {
185+ decodedToken = Unescape (token )
186+ next , err := p .resolveNodeForToken (node , decodedToken , nameProvider )
187+ if err != nil {
188+ return err
189+ }
186190
187- next , err := p .resolveNodeForToken (node , decodedToken , nameProvider )
188- if err != nil {
189- return err
191+ node = next
190192 }
191-
192- node = next
193193 }
194194
195- return nil
195+ // last token
196+ decodedToken = Unescape (p .referenceTokens [lastIndex ])
197+
198+ return setSingleImpl (node , data , decodedToken , nameProvider )
196199}
197200
198201func (p * Pointer ) resolveNodeForToken (node any , decodedToken string , nameProvider * jsonname.NameProvider ) (next any , err error ) {
0 commit comments