diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-31 10:33:36 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-03-31 10:33:36 +0200 |
commit | 6aba35fc6aff1f7de4d0395df189cd75ed0acff1 (patch) | |
tree | 17e939edfbb6e399a597a7ee510a293f1cedfa8b | |
parent | f801c835d8a1b359afe2f00aa270fe6e42923f2e (diff) | |
download | dotty-6aba35fc6aff1f7de4d0395df189cd75ed0acff1.tar.gz dotty-6aba35fc6aff1f7de4d0395df189cd75ed0acff1.tar.bz2 dotty-6aba35fc6aff1f7de4d0395df189cd75ed0acff1.zip |
Optimize hashCode computation
Also, update check file.
-rw-r--r-- | compiler/src/dotty/tools/dotc/transform/SyntheticMethods.scala | 4 | ||||
-rw-r--r-- | tests/run/caseClassHash.check | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/SyntheticMethods.scala b/compiler/src/dotty/tools/dotc/transform/SyntheticMethods.scala index adf65c3bb..bb11348c2 100644 --- a/compiler/src/dotty/tools/dotc/transform/SyntheticMethods.scala +++ b/compiler/src/dotty/tools/dotc/transform/SyntheticMethods.scala @@ -149,7 +149,7 @@ class SyntheticMethods(thisTransformer: DenotTransformer) { * gets the hashCode method: * * def hashCode: Int = { - * <synthetic> var acc: Int = productPrefix.hashCode() + * <synthetic> var acc: Int = "C".hashCode // constant folded * acc = Statics.mix(acc, x); * acc = Statics.mix(acc, Statics.this.anyHash(y)); * Statics.finalizeHash(acc, 2) @@ -157,7 +157,7 @@ class SyntheticMethods(thisTransformer: DenotTransformer) { */ def caseHashCodeBody(implicit ctx: Context): Tree = { val acc = ctx.newSymbol(ctx.owner, "acc".toTermName, Mutable | Synthetic, defn.IntType, coord = ctx.owner.pos) - val accDef = ValDef(acc, This(clazz).select(defn.Product_productPrefix).select(defn.Any_hashCode).ensureApplied) + val accDef = ValDef(acc, Literal(Constant(clazz.name.toString.hashCode))) val mixes = for (accessor <- accessors.toList) yield Assign(ref(acc), ref(defn.staticsMethod("mix")).appliedTo(ref(acc), hashImpl(accessor))) val finish = ref(defn.staticsMethod("finalizeHash")).appliedTo(ref(acc), Literal(Constant(accessors.size))) diff --git a/tests/run/caseClassHash.check b/tests/run/caseClassHash.check index b5a6f08e9..332fd477d 100644 --- a/tests/run/caseClassHash.check +++ b/tests/run/caseClassHash.check @@ -1,9 +1,9 @@ Foo(true,-1,-1,d,-5,-10,500.0,500.0,List(),5.0) Foo(true,-1,-1,d,-5,-10,500.0,500.0,List(),5) -1383698062 -1383698062 +205963949 +205963949 true -## method 1: 1383698062 -## method 2: 1383698062 +## method 1: 205963949 +## method 2: 205963949 Murmur 1: 1383698062 Murmur 2: 1383698062 |