]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/json: permit encoding uintptr as a string
authorIan Lance Taylor <iant@golang.org>
Wed, 8 Nov 2017 15:16:07 +0000 (07:16 -0800)
committerJoe Tsai <joetsai@google.com>
Wed, 8 Nov 2017 20:34:55 +0000 (20:34 +0000)
Fixes #22629

Change-Id: I31e85f9faa125ee0dfd6d3c5fa89334b00d61e6e
Reviewed-on: https://go-review.googlesource.com/76530
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Joe Tsai <joetsai@google.com>
src/encoding/json/decode_test.go
src/encoding/json/encode.go
src/encoding/json/encode_test.go

index 9ac2b14b136a9eeda7926a3c49cb67281911651e..fc546bf2a7f634c422004eff51361ba92aad1389 100644 (file)
@@ -1193,7 +1193,8 @@ type All struct {
        Foo  string `json:"bar"`
        Foo2 string `json:"bar2,dummyopt"`
 
-       IntStr int64 `json:",string"`
+       IntStr     int64   `json:",string"`
+       UintptrStr uintptr `json:",string"`
 
        PBool    *bool
        PInt     *int
@@ -1247,24 +1248,25 @@ type Small struct {
 }
 
 var allValue = All{
-       Bool:    true,
-       Int:     2,
-       Int8:    3,
-       Int16:   4,
-       Int32:   5,
-       Int64:   6,
-       Uint:    7,
-       Uint8:   8,
-       Uint16:  9,
-       Uint32:  10,
-       Uint64:  11,
-       Uintptr: 12,
-       Float32: 14.1,
-       Float64: 15.1,
-       Foo:     "foo",
-       Foo2:    "foo2",
-       IntStr:  42,
-       String:  "16",
+       Bool:       true,
+       Int:        2,
+       Int8:       3,
+       Int16:      4,
+       Int32:      5,
+       Int64:      6,
+       Uint:       7,
+       Uint8:      8,
+       Uint16:     9,
+       Uint32:     10,
+       Uint64:     11,
+       Uintptr:    12,
+       Float32:    14.1,
+       Float64:    15.1,
+       Foo:        "foo",
+       Foo2:       "foo2",
+       IntStr:     42,
+       UintptrStr: 44,
+       String:     "16",
        Map: map[string]Small{
                "17": {Tag: "tag17"},
                "18": {Tag: "tag18"},
@@ -1326,6 +1328,7 @@ var allValueIndent = `{
        "bar": "foo",
        "bar2": "foo2",
        "IntStr": "42",
+       "UintptrStr": "44",
        "PBool": null,
        "PInt": null,
        "PInt8": null,
@@ -1418,6 +1421,7 @@ var pallValueIndent = `{
        "bar": "",
        "bar2": "",
         "IntStr": "0",
+       "UintptrStr": "0",
        "PBool": true,
        "PInt": 2,
        "PInt8": 3,
index 3f7a8d01751fe20447d3f02a4004f572dd5ee3ae..317a5a940d00770658a4f37bee4dce4b11e0cb39 100644 (file)
@@ -1131,7 +1131,7 @@ func typeFields(t reflect.Type) []field {
                                        switch ft.Kind() {
                                        case reflect.Bool,
                                                reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
-                                               reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
+                                               reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
                                                reflect.Float32, reflect.Float64,
                                                reflect.String:
                                                quoted = true
index db89d113da398e92100abfd8f2973c0fac4b7927..0f194e13d2681f33e8b3752ec276fd851640ceca 100644 (file)
@@ -71,14 +71,16 @@ func TestOmitEmpty(t *testing.T) {
 }
 
 type StringTag struct {
-       BoolStr bool   `json:",string"`
-       IntStr  int64  `json:",string"`
-       StrStr  string `json:",string"`
+       BoolStr    bool    `json:",string"`
+       IntStr     int64   `json:",string"`
+       UintptrStr uintptr `json:",string"`
+       StrStr     string  `json:",string"`
 }
 
 var stringTagExpected = `{
  "BoolStr": "true",
  "IntStr": "42",
+ "UintptrStr": "44",
  "StrStr": "\"xzbit\""
 }`
 
@@ -86,6 +88,7 @@ func TestStringTag(t *testing.T) {
        var s StringTag
        s.BoolStr = true
        s.IntStr = 42
+       s.UintptrStr = 44
        s.StrStr = "xzbit"
        got, err := MarshalIndent(&s, "", " ")
        if err != nil {