Merge pull request #3 from adeuring/1243827
Fix LP bug 1243827
diff --git a/decode_test.go b/decode_test.go
index 0a533b1..80af1ed 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -350,6 +350,20 @@
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 {
diff --git a/resolve.go b/resolve.go
index d4bd532..dbda017 100644
--- a/resolve.go
+++ b/resolve.go
@@ -113,13 +113,8 @@
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)
@@ -127,17 +122,17 @@
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)
}