Skip to content

Commit

Permalink
Merge pull request #3 from adeuring/1243827
Browse files Browse the repository at this point in the history
Fix LP bug 1243827
  • Loading branch information
niemeyer committed Mar 14, 2014
2 parents ec232d2 + 399c334 commit 1418a9b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
14 changes: 14 additions & 0 deletions decode_test.go
Expand Up @@ -350,6 +350,20 @@ var unmarshalTests = []struct {
C inlineB `yaml:",inline"`
}{1, inlineB{2, inlineC{3}}},
},

// bug 1243827
{
"a: -b_c",
map[string]interface{}{"a": "-b_c"},
},
{
"a: +b_c",
map[string]interface{}{"a": "+b_c"},
},
{
"a: 50cent_of_dollar",
map[string]interface{}{"a": "50cent_of_dollar"},
},
}

type inlineB struct {
Expand Down
19 changes: 7 additions & 12 deletions resolve.go
Expand Up @@ -113,31 +113,26 @@ func resolve(tag string, in string) (rtag string, out interface{}) {

case 'D', 'S':
// Int, float, or timestamp.
for i := 0; i != len(in); i++ {
if in[i] == '_' {
in = strings.Replace(in, "_", "", -1)
break
}
}
intv, err := strconv.ParseInt(in, 0, 64)
plain := strings.Replace(in, "_", "", -1)
intv, err := strconv.ParseInt(plain, 0, 64)
if err == nil {
if intv == int64(int(intv)) {
return "!!int", int(intv)
} else {
return "!!int", intv
}
}
floatv, err := strconv.ParseFloat(in, 64)
floatv, err := strconv.ParseFloat(plain, 64)
if err == nil {
return "!!float", floatv
}
if strings.HasPrefix(in, "0b") {
intv, err := strconv.ParseInt(in[2:], 2, 64)
if strings.HasPrefix(plain, "0b") {
intv, err := strconv.ParseInt(plain[2:], 2, 64)
if err == nil {
return "!!int", int(intv)
}
} else if strings.HasPrefix(in, "-0b") {
intv, err := strconv.ParseInt(in[3:], 2, 64)
} else if strings.HasPrefix(plain, "-0b") {
intv, err := strconv.ParseInt(plain[3:], 2, 64)
if err == nil {
return "!!int", -int(intv)
}
Expand Down

0 comments on commit 1418a9b

Please sign in to comment.