Merge pull request #39 from pelletier/pelletier/integers_underscores

Accept underscores in integers
This commit is contained in:
Thomas Pelletier
2015-07-17 16:54:19 -07:00
4 changed files with 42 additions and 1 deletions
+2
View File
@@ -531,6 +531,8 @@ func (l *tomlLexer) lexNumber() tomlLexStateFn {
}
} else if isDigit(next) {
digitSeen = true
} else if next == '_' {
l.pos++
} else {
l.backup()
break
+21
View File
@@ -443,6 +443,27 @@ func TestKeyEqualNumber(t *testing.T) {
token{Position{1, 7}, tokenFloat, "-4.2"},
token{Position{1, 11}, tokenEOF, ""},
})
testFlow(t, "foo = 1_000", []token{
token{Position{1, 1}, tokenKey, "foo"},
token{Position{1, 5}, tokenEqual, "="},
token{Position{1, 7}, tokenInteger, "1_000"},
token{Position{1, 12}, tokenEOF, ""},
})
testFlow(t, "foo = 5_349_221", []token{
token{Position{1, 1}, tokenKey, "foo"},
token{Position{1, 5}, tokenEqual, "="},
token{Position{1, 7}, tokenInteger, "5_349_221"},
token{Position{1, 16}, tokenEOF, ""},
})
testFlow(t, "foo = 1_2_3_4_5", []token{
token{Position{1, 1}, tokenKey, "foo"},
token{Position{1, 5}, tokenEqual, "="},
token{Position{1, 7}, tokenInteger, "1_2_3_4_5"},
token{Position{1, 16}, tokenEOF, ""},
})
}
func TestMultiline(t *testing.T) {
+2 -1
View File
@@ -224,7 +224,8 @@ func (p *tomlParser) parseRvalue() interface{} {
case tokenFalse:
return false
case tokenInteger:
val, err := strconv.ParseInt(tok.val, 10, 64)
cleanedVal := strings.Replace(tok.val, "_", "", -1)
val, err := strconv.ParseInt(cleanedVal, 10, 64)
if err != nil {
p.raiseError(tok, "%s", err)
}
+17
View File
@@ -68,6 +68,23 @@ func TestSimpleNumbers(t *testing.T) {
})
}
func TestIntegersWithUnderscores(t *testing.T) {
tree, err := Load("a = 1_000")
assertTree(t, tree, err, map[string]interface{}{
"a": int64(1000),
})
tree, err = Load("a = 5_349_221")
assertTree(t, tree, err, map[string]interface{}{
"a": int64(5349221),
})
tree, err = Load("a = 1_2_3_4_5")
assertTree(t, tree, err, map[string]interface{}{
"a": int64(12345),
})
}
func TestFloatsWithExponents(t *testing.T) {
tree, err := Load("a = 5e+22\nb = 5E+22\nc = -5e+22\nd = -5e-22\ne = 6.626e-34")
assertTree(t, tree, err, map[string]interface{}{