Added error context for parsing of subtrees
diff --git a/parser.go b/parser.go index 4d3927c..2e70e74 100644 --- a/parser.go +++ b/parser.go
@@ -134,7 +134,9 @@ } } 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)
diff --git a/parser_test.go b/parser_test.go index b73fcce..752c4a7 100644 --- a/parser_test.go +++ b/parser_test.go
@@ -228,7 +228,7 @@ 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()) } }
diff --git a/toml.go b/toml.go index 84403fe..5dceb15 100644 --- a/toml.go +++ b/toml.go
@@ -142,11 +142,13 @@ // // 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 @@ } subtree = ((*subtree)[intermediate_key]).(*TomlTree) } + return nil } // encodes a string to a TOML-compliant string value