# HG changeset patch # User Jaroslav Tulach # Date 1355689166 -3600 # Node ID b8fd5ab83a2039a1cddbb5a6344187715f91e634 # Parent b5dd05670bef61a9a18402693b9ebdd2c980891e Giving objects some basic and stable hashCode diff -r b5dd05670bef -r b8fd5ab83a20 emul/src/main/java/java/lang/Object.java --- a/emul/src/main/java/java/lang/Object.java Sun Dec 16 20:48:21 2012 +0100 +++ b/emul/src/main/java/java/lang/Object.java Sun Dec 16 21:19:26 2012 +0100 @@ -104,6 +104,11 @@ * @see java.lang.Object#equals(java.lang.Object) * @see java.lang.System#identityHashCode */ + @JavaScriptBody(args = "self", body = + "if (self.$hashCode) return self.$hashCode;\n" + + "var h = Math.random() * Math.pow(2, 32);\n" + + "return self.$hashCode = h & h;" + ) public native int hashCode(); /** diff -r b5dd05670bef -r b8fd5ab83a20 vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareHashTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareHashTest.java Sun Dec 16 20:48:21 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareHashTest.java Sun Dec 16 21:19:26 2012 +0100 @@ -30,6 +30,11 @@ return "Ahoj".hashCode(); } + @Compare public int hashRemainsYieldsZero() { + Object o = new Object(); + return o.hashCode() - o.hashCode(); + } + @Factory public static Object[] create() { return CompareVMs.create(CompareHashTest.class);