Added error context for parsing of subtrees

This commit is contained in:
eanderton
2014-08-06 08:20:53 -04:00
parent 6db660fed5
commit 1f8a8cbc06
3 changed files with 9 additions and 4 deletions
+3 -1
View File
@@ -134,7 +134,9 @@ func parseGroup(p *parser) parserStateFn {
}
}
p.seenGroupKeys = append(p.seenGroupKeys, key.val)
p.tree.createSubTree(key.val)
if err := p.tree.createSubTree(key.val); err != nil {
p.raiseError(key, "%s", err)
}
p.assume(tokenRightBracket)
p.currentGroup = strings.Split(key.val, ".")
return parseStart(p)
+1 -1
View File
@@ -228,7 +228,7 @@ func TestDuplicateKeys(t *testing.T) {
func TestEmptyIntermediateTable(t *testing.T) {
_, err := Load("[foo..bar]")
if err.Error() != "empty intermediate table" {
if err.Error() != "(1, 2): empty intermediate table" {
t.Error("Bad error message:", err.Error())
}
}
+5 -2
View File
@@ -142,11 +142,13 @@ func (t *TomlTree) SetPath(keys []string, value interface{}) {
//
// e.g. passing a.b.c will create (assuming tree is empty) tree[a], tree[a][b]
// and tree[a][b][c]
func (t *TomlTree) createSubTree(key string) {
//
// Returns nil on success, error object on failure
func (t *TomlTree) createSubTree(key string) error{
subtree := t
for _, intermediate_key := range strings.Split(key, ".") {
if intermediate_key == "" {
panic("empty intermediate table")
return fmt.Errorf("empty intermediate table")
}
_, exists := (*subtree)[intermediate_key]
if !exists {
@@ -155,6 +157,7 @@ func (t *TomlTree) createSubTree(key string) {
}
subtree = ((*subtree)[intermediate_key]).(*TomlTree)
}
return nil
}
// encodes a string to a TOML-compliant string value