Fix incorrect type display on nil pointers.

This was reported by korschak as issue #4 who also pinpointed the issue
and provided a patch.
This commit is contained in:
Dave Collins 2013-01-12 23:30:04 -06:00
parent a2ceabae67
commit 389ea44d6a
2 changed files with 10 additions and 8 deletions

View File

@ -66,11 +66,11 @@ func (d *dumpState) dumpPtr(v reflect.Value) {
indirects := 0 indirects := 0
ve := v ve := v
for ve.Kind() == reflect.Ptr { for ve.Kind() == reflect.Ptr {
indirects++
if ve.IsNil() { if ve.IsNil() {
nilFound = true nilFound = true
break break
} }
indirects++
addr := ve.Pointer() addr := ve.Pointer()
pointerChain = append(pointerChain, addr) pointerChain = append(pointerChain, addr)
if pd, ok := d.pointers[addr]; ok && pd < d.depth { if pd, ok := d.pointers[addr]; ok && pd < d.depth {
@ -97,14 +97,16 @@ func (d *dumpState) dumpPtr(v reflect.Value) {
d.w.Write(closeParenBytes) d.w.Write(closeParenBytes)
// Display pointer information. // Display pointer information.
d.w.Write(openParenBytes) if len(pointerChain) > 0 {
for i, addr := range pointerChain { d.w.Write(openParenBytes)
if i > 0 { for i, addr := range pointerChain {
d.w.Write(pointerChainBytes) if i > 0 {
d.w.Write(pointerChainBytes)
}
printHexPtr(d.w, addr)
} }
printHexPtr(d.w, addr) d.w.Write(closeParenBytes)
} }
d.w.Write(closeParenBytes)
// Display dereferenced value. // Display dereferenced value.
d.w.Write(openParenBytes) d.w.Write(openParenBytes)

View File

@ -115,11 +115,11 @@ func (f *formatState) formatPtr(v reflect.Value) {
indirects := 0 indirects := 0
ve := v ve := v
for ve.Kind() == reflect.Ptr { for ve.Kind() == reflect.Ptr {
indirects++
if ve.IsNil() { if ve.IsNil() {
nilFound = true nilFound = true
break break
} }
indirects++
addr := ve.Pointer() addr := ve.Pointer()
pointerChain = append(pointerChain, addr) pointerChain = append(pointerChain, addr)
if pd, ok := f.pointers[addr]; ok && pd < f.depth { if pd, ok := f.pointers[addr]; ok && pd < f.depth {