| // Copyright (c) 2012, 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. |
| |
| patch class Object { |
| |
| // Helpers used to implement hashCode. If a hashCode is used we remember it |
| // using an Expando object. A new hashCode value is calculated using a Random |
| // number generator. |
| static Expando _hashCodeExp = new Expando("Object.hashCode"); |
| static Random _hashCodeRnd = new Random(); |
| |
| /* patch */ int get hashCode { |
| if (this == null) { |
| return 2011; // The year Dart was announced and a prime. |
| } |
| var result = _hashCodeExp[this]; |
| if (result == null) { |
| result = _hashCodeRnd.nextInt(0x40000000); // Stay in Smi range. |
| _hashCodeExp[this] = result; |
| } |
| return result; |
| } |
| |
| /* patch */ String toString() native "Object_toString"; |
| // A statically dispatched version of Object.toString. |
| static String _toString(obj) native "Object_toString"; |
| |
| _noSuchMethod(bool isMethod, |
| String memberName, |
| int type, |
| List arguments, |
| Map<String, dynamic> namedArguments) |
| native "Object_noSuchMethod"; |
| |
| /* patch */ noSuchMethod(InvocationMirror invocation) { |
| return _noSuchMethod(invocation.isMethod, |
| invocation.memberName, |
| invocation._type, |
| invocation.positionalArguments, |
| invocation.namedArguments); |
| } |
| |
| // Call this function instead of inlining instanceof, thus collecting |
| // type feedback and reducing code size of unoptimized code. |
| _instanceOf(instantiator, |
| instantiator_type_arguments, |
| type, |
| bool negate) |
| native "Object_instanceOf"; |
| |
| /* patch */ Type get runtimeType native "Object_runtimeType"; |
| } |