Fixed path handling and key group array name lexing for test compliance

This commit is contained in:
eanderton
2014-07-08 22:00:46 -04:00
parent abdecb7be7
commit 262211488d
2 changed files with 26 additions and 4 deletions
+6 -2
View File
@@ -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
+20 -2
View File
@@ -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
}