]> Cypherpunks repositories - gostls13.git/commitdiff
nil in DeepEqual
authorRuss Cox <rsc@golang.org>
Thu, 3 Sep 2009 22:45:43 +0000 (15:45 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 3 Sep 2009 22:45:43 +0000 (15:45 -0700)
R=r
DELTA=13  (5 added, 6 deleted, 2 changed)
OCL=34337
CL=34343

src/pkg/reflect/all_test.go
src/pkg/reflect/deepequal.go

index 2a30ddd87589904319a0ceb28062b57f9af8db00..0702513fd99a68af2df3932051e10d6af0c97242 100644 (file)
@@ -378,6 +378,8 @@ var deepEqualTests = []DeepEqualTest {
        DeepEqualTest{ map[int]string{ 1:"one", 2:"txo" }, map[int]string{ 2:"two", 1:"one" }, false },
        DeepEqualTest{ map[int]string{ 1:"one", }, map[int]string{ 2:"two", 1:"one" }, false },
        DeepEqualTest{ map[int]string{ 2:"two", 1:"one" }, map[int]string{ 1:"one", }, false },
+       DeepEqualTest{ nil, 1, false },
+       DeepEqualTest{ 1, nil, false },
 
        // Mismatched types
        DeepEqualTest{ 1, 1.0, false },
index 86da3c6ee941c675e0e48f607809dda5f999888e..60539bfd801eec1d70deda82bcd7f8840aeeded0 100644 (file)
@@ -22,11 +22,8 @@ type visit struct {
 // comparisons that have already been seen, which allows short circuiting on
 // recursive types.
 func deepValueEqual(v1, v2 Value, visited map[uintptr]*visit, depth int) bool {
-       if v1 == nil {
-               return v2 == nil
-       }
-       if v2 == nil {
-               return false
+       if v1 == nil || v2 == nil {
+               return v1 == v2
        }
        if v1.Type() != v2.Type() {
                return false;
@@ -126,11 +123,11 @@ func deepValueEqual(v1, v2 Value, visited map[uintptr]*visit, depth int) bool {
 // but will scan members of arrays, slices, and fields of structs. It correctly
 // handles recursive types.
 func DeepEqual(a1, a2 interface{}) bool {
+       if a1 == nil || a2 == nil {
+               return a1 == a2;
+       }
        v1 := NewValue(a1);
        v2 := NewValue(a2);
-       if v1 == nil {
-               return v1 == v2;
-       }
        if v1.Type() != v2.Type() {
                return false;
        }