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