blob: afce21171ba4da2d45f8778f84cd929122a66254 [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of "core_patch.dart";
@patch
class Object {
@patch
external bool operator ==(Object other);
// Random number generator used to generate identity hash codes.
static final _hashCodeRnd = new Random();
static int _objectHashCode(Object obj) {
var result = getIdentityHashField(obj);
if (result == 0) {
// We want the hash to be a Smi value greater than 0.
do {
result = _hashCodeRnd.nextInt(0x40000000);
} while (result == 0);
setIdentityHashField(obj, result);
return result;
}
return result;
}
@patch
int get hashCode => _objectHashCode(this);
/// Concrete subclasses of [Object] will have overrides of [_typeArguments]
/// which return their type arguments.
WasmArray<_Type> get _typeArguments => const WasmArray<_Type>.literal([]);
// An instance member needs a call from Dart code to be properly included in
// the dispatch table. Hence we use an inlined static wrapper as entry point.
@pragma("wasm:entry-point")
@pragma("wasm:prefer-inline")
static WasmArray<_Type> _getTypeArguments(Object object) =>
object._typeArguments;
@patch
external Type get runtimeType;
@patch
String toString() => _toString(this);
// A statically dispatched version of Object.toString.
static String _toString(Object obj) {
return "Instance of '${_getMasqueradedRuntimeType(obj)}'";
}
@patch
@pragma("wasm:entry-point")
dynamic noSuchMethod(Invocation invocation) {
throw new NoSuchMethodError.withInvocation(this, invocation);
}
// Used for `null.toString` tear-offs.
@pragma("wasm:entry-point")
static String _nullToString() => "null";
// Used for `null.noSuchMethod` tear-offs.
@pragma("wasm:entry-point")
static dynamic _nullNoSuchMethod(Invocation invocation) {
throw new NoSuchMethodError.withInvocation(null, invocation);
}
}