1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
package toml
import (
"strings"
)
type ArrayKeyStack struct {
stack []string
}
func (a *ArrayKeyStack) Push(key string, v Var) (toClose []string) {
for {
if len(a.stack) == 0 {
break
}
ck := a.stack[len(a.stack)-1]
if strings.HasPrefix(key, ck) {
break
}
toClose = append(toClose, ck)
a.stack = a.stack[:len(a.stack)-1]
}
if v == ArrayVar {
if len(a.stack) > 0 && a.stack[len(a.stack)-1] == key {
return append(toClose, a.stack[len(a.stack)-1])
}
a.stack = append(a.stack, key)
}
return toClose
}
|