diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt index 2bd4a9ff89d..eb752128e43 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt @@ -267,6 +267,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV val klassId = context.referenceClassId(klass.symbol) body.buildConstI32Symbol(klassId) + body.buildConstI32(0) // Any::_hashCode generateExpression(call.getValueArgument(0)!!) body.buildGetGlobal(context.referenceClassRTT(klass.symbol)) body.buildStructNew(structTypeName) diff --git a/libraries/stdlib/wasm/builtins/kotlin/Any.kt b/libraries/stdlib/wasm/builtins/kotlin/Any.kt index c95a877af4f..324f8ce899e 100644 --- a/libraries/stdlib/wasm/builtins/kotlin/Any.kt +++ b/libraries/stdlib/wasm/builtins/kotlin/Any.kt @@ -7,6 +7,8 @@ package kotlin import kotlin.wasm.internal.* +import kotlin.random.* + /** * The root of the Kotlin class hierarchy. Every Kotlin class has [Any] as a superclass. */ @@ -37,8 +39,12 @@ public open class Any { * * Whenever it is invoked on the same object more than once, the `hashCode` method must consistently return the same integer, provided no information used in `equals` comparisons on the object is modified. * * If two objects are equal according to the `equals()` method, then calling the `hashCode` method on each of the two objects must produce the same integer result. */ - // TODO: Implement - public open fun hashCode(): Int = 100 + internal var _hashCode: Int = 0 + public open fun hashCode(): Int { + if (_hashCode == 0) + _hashCode = Random.nextInt(1, Int.MAX_VALUE) + return _hashCode + } /** * Returns a string representation of the object. diff --git a/libraries/stdlib/wasm/builtins/kotlin/String.kt b/libraries/stdlib/wasm/builtins/kotlin/String.kt index 7a258c1657f..19d26756565 100644 --- a/libraries/stdlib/wasm/builtins/kotlin/String.kt +++ b/libraries/stdlib/wasm/builtins/kotlin/String.kt @@ -59,15 +59,14 @@ public class String private constructor(internal val chars: CharArray) : Compara public override fun toString(): String = this - private var cachedHash: Int = 0 public override fun hashCode(): Int { - if (cachedHash != 0 || this.isEmpty()) - return cachedHash + if (_hashCode != 0 || this.isEmpty()) + return _hashCode var hash = 0 for (c in chars) hash = 31 * hash + c.toInt() - cachedHash = hash - return cachedHash + _hashCode = hash + return _hashCode } }