Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: runtime/lib/function.dart

Issue 2983823002: Improve hashCode for closures (Closed)
Patch Set: Error handling Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}
« no previous file with comments | « runtime/lib/function.cc ('k') | runtime/vm/bootstrap.cc » ('j') | runtime/vm/object.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698