diff --git a/src/toml/lexer.go b/src/toml/lexer.go index 0690c28..586263b 100644 --- a/src/toml/lexer.go +++ b/src/toml/lexer.go @@ -76,6 +76,7 @@ type lexer struct { pos int width int tokens chan token + depth int } func (l *lexer) run() { @@ -177,8 +178,10 @@ func lexRvalue(l *lexer) stateFn { next := l.peek() switch next { case '[': + l.depth += 1 return lexLeftBracket case ']': + l.depth -= 1 return lexRightBracket case '#': return lexComment @@ -189,8 +192,11 @@ func lexRvalue(l *lexer) stateFn { case '\n': l.ignore() l.pos += 1 - /*l.emit(tokenEOF)*/ - return lexVoid + if l.depth == 0 { + return lexVoid + } else { + return lexRvalue + } } if l.follow("true") { diff --git a/src/toml/parser_test.go b/src/toml/parser_test.go index e3dcf1c..fd271ce 100644 --- a/src/toml/parser_test.go +++ b/src/toml/parser_test.go @@ -88,6 +88,13 @@ func TestArraySimple(t *testing.T) { }) } +func TestArrayMultiline(t *testing.T) { + tree := Load("a = [42,\n21, 10,]") + assertTree(t, tree, map[string]interface{}{ + "a": []int64{int64(42), int64(21), int64(10)}, + }) +} + func TestArrayNested(t *testing.T) { tree := Load("a = [[42, 21], [10]]") assertTree(t, tree, map[string]interface{}{