Index: runtime/lib/function.dart |
diff --git a/runtime/lib/function.dart b/runtime/lib/function.dart |
index 7f0556de37369ccc5dda11d71eea2b0e25f49832..c3b17d963b17a7ad94bec48f834ec37dae44c444 100644 |
--- a/runtime/lib/function.dart |
+++ b/runtime/lib/function.dart |
@@ -5,16 +5,23 @@ |
class _Closure implements Function { |
bool operator ==(other) native "Closure_equals"; |
- int get hashCode native "Closure_hashCode"; |
+ int get hashCode { |
+ if (_hash == null) { |
+ _hash = _computeHash(); |
+ } |
+ return _hash; |
+ } |
_Closure get call => this; |
_Closure _clone() native "Closure_clone"; |
+ int _computeHash() native "Closure_computeHash"; |
+ |
// No instance fields should be declared before the following 4 fields whose |
// offsets must be identical in Dart and C++. |
- // The following 4 fields are declared both in raw_object.h (for direct access |
+ // The following fields are declared both in raw_object.h (for direct access |
// from C++ code) and also here so that the offset-to-field map used by |
// deferred objects is properly initialized. |
// Caution: These fields are not Dart instances, but VM objects. Their Dart |
@@ -23,4 +30,5 @@ class _Closure implements Function { |
var _function_type_arguments; |
var _function; |
var _context; |
+ var _hash; |
} |