@@ -931,42 +931,29 @@ func valueToString(v reflect.Value) (string, os.Error) {
931
931
}
932
932
933
933
case * reflect.IntValue :
934
- return strconv .Itoa (v .Get ()), nil
935
- case * reflect.Int8Value :
936
- return strconv .Itoa (int (v .Get ())), nil
937
- case * reflect.Int16Value :
938
- return strconv .Itoa (int (v .Get ())), nil
939
- case * reflect.Int32Value :
940
- return strconv .Itoa (int (v .Get ())), nil
941
- case * reflect.Int64Value :
942
934
return strconv .Itoa64 (v .Get ()), nil
943
-
944
935
case * reflect.UintValue :
945
- return strconv .Uitoa (v .Get ()), nil
946
- case * reflect.Uint8Value :
947
- return strconv .Uitoa (uint (v .Get ())), nil
948
- case * reflect.Uint16Value :
949
- return strconv .Uitoa (uint (v .Get ())), nil
950
- case * reflect.Uint32Value :
951
- return strconv .Uitoa (uint (v .Get ())), nil
952
- case * reflect.Uint64Value :
953
936
return strconv .Uitoa64 (v .Get ()), nil
954
- case * reflect.UintptrValue :
937
+ case * reflect.UnsafePointerValue :
955
938
return strconv .Uitoa64 (uint64 (v .Get ())), nil
956
939
957
940
case * reflect.FloatValue :
958
- return strconv .Ftoa (v .Get (), 'g' , - 1 ), nil
959
- case * reflect.Float32Value :
960
- return strconv .Ftoa32 (v .Get (), 'g' , - 1 ), nil
961
- case * reflect.Float64Value :
962
941
return strconv .Ftoa64 (v .Get (), 'g' , - 1 ), nil
963
942
964
943
case * reflect.StringValue :
965
944
return v .Get (), nil
945
+
946
+ //This is kind of a rough hack to replace the old []byte
947
+ //detection with reflect.Uint8Type, it doesn't catch
948
+ //zero-length byte slices
966
949
case * reflect.SliceValue :
967
950
typ := v .Type ().(* reflect.SliceType )
968
- if _ , ok := typ .Elem ().(* reflect.Uint8Type ); ok {
969
- return string (v .Interface ().([]byte )), nil
951
+ if _ , ok := typ .Elem ().(* reflect.UintType ); ok {
952
+ if v .Len () > 0 {
953
+ if v .Elem (1 ).(* reflect.UintValue ).Overflow (257 ) {
954
+ return string (v .Interface ().([]byte )), nil
955
+ }
956
+ }
970
957
}
971
958
}
972
959
return "" , os .NewError ("Unsupported type" )
@@ -1093,86 +1080,18 @@ func writeTo(data []byte, val reflect.Value) os.Error {
1093
1080
}
1094
1081
v .Set (b )
1095
1082
case * reflect.IntValue :
1096
- i , err := strconv .Atoi (s )
1097
- if err != nil {
1098
- return err
1099
- }
1100
- v .Set (i )
1101
- case * reflect.Int8Value :
1102
- i , err := strconv .Atoi (s )
1103
- if err != nil {
1104
- return err
1105
- }
1106
- v .Set (int8 (i ))
1107
- case * reflect.Int16Value :
1108
- i , err := strconv .Atoi (s )
1109
- if err != nil {
1110
- return err
1111
- }
1112
- v .Set (int16 (i ))
1113
- case * reflect.Int32Value :
1114
- i , err := strconv .Atoi (s )
1115
- if err != nil {
1116
- return err
1117
- }
1118
- v .Set (int32 (i ))
1119
- case * reflect.Int64Value :
1120
1083
i , err := strconv .Atoi64 (s )
1121
1084
if err != nil {
1122
1085
return err
1123
1086
}
1124
1087
v .Set (i )
1125
1088
case * reflect.UintValue :
1126
- ui , err := strconv .Atoui (s )
1127
- if err != nil {
1128
- return err
1129
- }
1130
- v .Set (ui )
1131
-
1132
- case * reflect.Uint8Value :
1133
- ui , err := strconv .Atoui (s )
1134
- if err != nil {
1135
- return err
1136
- }
1137
- v .Set (uint8 (ui ))
1138
- case * reflect.Uint16Value :
1139
- ui , err := strconv .Atoui (s )
1140
- if err != nil {
1141
- return err
1142
- }
1143
- v .Set (uint16 (ui ))
1144
- case * reflect.Uint32Value :
1145
- ui , err := strconv .Atoui (s )
1146
- if err != nil {
1147
- return err
1148
- }
1149
- v .Set (uint32 (ui ))
1150
- case * reflect.Uint64Value :
1151
1089
ui , err := strconv .Atoui64 (s )
1152
1090
if err != nil {
1153
1091
return err
1154
1092
}
1155
1093
v .Set (ui )
1156
- case * reflect.UintptrValue :
1157
- ui , err := strconv .Atoui64 (s )
1158
- if err != nil {
1159
- return err
1160
- }
1161
- v .Set (uintptr (ui ))
1162
1094
case * reflect.FloatValue :
1163
- f , err := strconv .Atof (s )
1164
- if err != nil {
1165
- return err
1166
- }
1167
- v .Set (f )
1168
-
1169
- case * reflect.Float32Value :
1170
- f , err := strconv .Atof32 (s )
1171
- if err != nil {
1172
- return err
1173
- }
1174
- v .Set (f )
1175
- case * reflect.Float64Value :
1176
1095
f , err := strconv .Atof64 (s )
1177
1096
if err != nil {
1178
1097
return err
@@ -1183,7 +1102,7 @@ func writeTo(data []byte, val reflect.Value) os.Error {
1183
1102
v .Set (s )
1184
1103
case * reflect.SliceValue :
1185
1104
typ := v .Type ().(* reflect.SliceType )
1186
- if _ , ok := typ .Elem ().(* reflect.Uint8Type ); ok {
1105
+ if _ , ok := typ .Elem ().(* reflect.UintType ); ok {
1187
1106
v .Set (reflect .NewValue (data ).(* reflect.SliceValue ))
1188
1107
}
1189
1108
}
0 commit comments