summaryrefslogtreecommitdiff
path: root/src/pkg/json
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-06-20 12:16:25 -0700
committerRuss Cox <rsc@golang.org>2010-06-20 12:16:25 -0700
commitbe1fb301f118bbbf0cc9564f72392390425b5c67 (patch)
tree6858bcb73f10fcafb2b153875c318462b35a6c53 /src/pkg/json
parent91b42e59afb95e7ff63ec1bee1c2a322b6848d66 (diff)
downloadgolang-be1fb301f118bbbf0cc9564f72392390425b5c67.tar.gz
reflect: add Kind, remove Int8Type, Int8Value, etc.
update other code to match. R=r CC=golang-dev http://codereview.appspot.com/1680044
Diffstat (limited to 'src/pkg/json')
-rw-r--r--src/pkg/json/decode.go85
-rw-r--r--src/pkg/json/encode.go24
2 files changed, 5 insertions, 104 deletions
diff --git a/src/pkg/json/decode.go b/src/pkg/json/decode.go
index 9295bd2dc..6f768d4b8 100644
--- a/src/pkg/json/decode.go
+++ b/src/pkg/json/decode.go
@@ -572,101 +572,24 @@ func (d *decodeState) literal(v reflect.Value) {
v.Set(reflect.NewValue(n))
case *reflect.IntValue:
- n, err := strconv.Atoi(s)
- if err != nil {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(n)
- case *reflect.Int8Value:
- n, err := strconv.Atoi(s)
- if err != nil || int(int8(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(int8(n))
- case *reflect.Int16Value:
- n, err := strconv.Atoi(s)
- if err != nil || int(int16(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(int16(n))
- case *reflect.Int32Value:
- n, err := strconv.Atoi(s)
- if err != nil || int(int32(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(int32(n))
- case *reflect.Int64Value:
n, err := strconv.Atoi64(s)
- if err != nil {
+ if err != nil || v.Overflow(n) {
d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
break
}
v.Set(n)
case *reflect.UintValue:
- n, err := strconv.Atoui(s)
- if err != nil {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(n)
- case *reflect.Uint8Value:
- n, err := strconv.Atoui(s)
- if err != nil || uint(uint8(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(uint8(n))
- case *reflect.Uint16Value:
- n, err := strconv.Atoui(s)
- if err != nil || uint(uint16(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(uint16(n))
- case *reflect.Uint32Value:
- n, err := strconv.Atoui(s)
- if err != nil || uint(uint32(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(uint32(n))
- case *reflect.Uint64Value:
n, err := strconv.Atoui64(s)
- if err != nil {
+ if err != nil || v.Overflow(n) {
d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
break
}
v.Set(n)
- case *reflect.UintptrValue:
- n, err := strconv.Atoui64(s)
- if err != nil || uint64(uintptr(n)) != n {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(uintptr(n))
case *reflect.FloatValue:
- n, err := strconv.Atof(s)
- if err != nil {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(n)
- case *reflect.Float32Value:
- n, err := strconv.Atof32(s)
- if err != nil {
- d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
- break
- }
- v.Set(n)
- case *reflect.Float64Value:
- n, err := strconv.Atof64(s)
- if err != nil {
+ n, err := strconv.AtofN(s, int(v.Type().Size()*8))
+ if err != nil || v.Overflow(n) {
d.saveError(&UnmarshalTypeError{"number " + s, v.Type()})
break
}
diff --git a/src/pkg/json/encode.go b/src/pkg/json/encode.go
index 839657c36..8b0f78488 100644
--- a/src/pkg/json/encode.go
+++ b/src/pkg/json/encode.go
@@ -156,35 +156,13 @@ func (e *encodeState) reflectValue(v reflect.Value) {
}
case *reflect.IntValue:
- e.WriteString(strconv.Itoa(v.Get()))
- case *reflect.Int8Value:
- e.WriteString(strconv.Itoa(int(v.Get())))
- case *reflect.Int16Value:
- e.WriteString(strconv.Itoa(int(v.Get())))
- case *reflect.Int32Value:
- e.WriteString(strconv.Itoa(int(v.Get())))
- case *reflect.Int64Value:
e.WriteString(strconv.Itoa64(v.Get()))
case *reflect.UintValue:
- e.WriteString(strconv.Uitoa(v.Get()))
- case *reflect.Uint8Value:
- e.WriteString(strconv.Uitoa(uint(v.Get())))
- case *reflect.Uint16Value:
- e.WriteString(strconv.Uitoa(uint(v.Get())))
- case *reflect.Uint32Value:
- e.WriteString(strconv.Uitoa(uint(v.Get())))
- case *reflect.Uint64Value:
e.WriteString(strconv.Uitoa64(v.Get()))
- case *reflect.UintptrValue:
- e.WriteString(strconv.Uitoa64(uint64(v.Get())))
case *reflect.FloatValue:
- e.WriteString(strconv.Ftoa(v.Get(), 'g', -1))
- case *reflect.Float32Value:
- e.WriteString(strconv.Ftoa32(v.Get(), 'g', -1))
- case *reflect.Float64Value:
- e.WriteString(strconv.Ftoa64(v.Get(), 'g', -1))
+ e.WriteString(strconv.FtoaN(v.Get(), 'g', -1, int(v.Type().Size()*8)))
case *reflect.StringValue:
e.string(v.Get())