changeset 16530:6694631668a6

Avoid infinite recursion of deep equals checks, but also satisfy the automatic checking that does not allow == on values
author Christian Wimmer <christian.wimmer@oracle.com>
date Tue, 15 Jul 2014 16:44:56 -0700
parents f6ac86d3334e
children fb1c21844758
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java	Tue Jul 15 16:34:53 2014 -0700
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java	Tue Jul 15 16:44:56 2014 -0700
@@ -187,7 +187,11 @@
                 return false;
             }
             for (int i = 0; i < values.length; i++) {
-                if (!Objects.equals(values[i], l.values[i])) {
+                /*
+                 * Virtual objects can form cycles. Calling equals() could therefore lead to
+                 * infinite recursion.
+                 */
+                if (!same(values[i], l.values[i])) {
                     return false;
                 }
             }
@@ -195,4 +199,8 @@
         }
         return false;
     }
+
+    private static boolean same(Object o1, Object o2) {
+        return o1 == o2;
+    }
 }