Fixed path handling and key group array name lexing for test compliance
This commit is contained in:
@@ -417,7 +417,9 @@ func lexInsideKeyGroupArray(l *lexer) stateFn {
|
||||
l.pos += 1
|
||||
l.emit(tokenDoubleRightBracket)
|
||||
return lexVoid
|
||||
}
|
||||
} else if l.peek() == '[' {
|
||||
return l.errorf("group name cannot contain ']'")
|
||||
}
|
||||
|
||||
if l.next() == eof {
|
||||
break
|
||||
@@ -436,7 +438,9 @@ func lexInsideKeyGroup(l *lexer) stateFn {
|
||||
l.pos += 1
|
||||
l.emit(tokenRightBracket)
|
||||
return lexVoid
|
||||
}
|
||||
} else if l.peek() == '[' {
|
||||
return l.errorf("group name cannot contain ']'")
|
||||
}
|
||||
|
||||
if l.next() == eof {
|
||||
break
|
||||
|
||||
@@ -64,7 +64,16 @@ func (t *TomlTree) GetPath(keys []string) interface{} {
|
||||
if !exists {
|
||||
return nil
|
||||
}
|
||||
subtree = (*subtree)[intermediate_key].(*TomlTree)
|
||||
switch node := (*subtree)[intermediate_key].(type) {
|
||||
case *TomlTree:
|
||||
subtree = node
|
||||
case []*TomlTree:
|
||||
// go to most recent element
|
||||
if len(node) == 0 {
|
||||
return nil //(*subtree)[intermediate_key] = append(node, &TomlTree{})
|
||||
}
|
||||
subtree = node[len(node)-1]
|
||||
}
|
||||
}
|
||||
return (*subtree)[keys[len(keys)-1]]
|
||||
}
|
||||
@@ -93,7 +102,16 @@ func (t *TomlTree) SetPath(keys []string, value interface{}) {
|
||||
var new_tree TomlTree = make(TomlTree)
|
||||
(*subtree)[intermediate_key] = &new_tree
|
||||
}
|
||||
subtree = (*subtree)[intermediate_key].(*TomlTree)
|
||||
switch node := (*subtree)[intermediate_key].(type) {
|
||||
case *TomlTree:
|
||||
subtree = node
|
||||
case []*TomlTree:
|
||||
// go to most recent element
|
||||
if len(node) == 0 {
|
||||
(*subtree)[intermediate_key] = append(node, &TomlTree{})
|
||||
}
|
||||
subtree = node[len(node)-1]
|
||||
}
|
||||
}
|
||||
(*subtree)[keys[len(keys)-1]] = value
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user