| // Copyright (c) 2013, 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"; |
| |
| @pragma("vm:entry-point") |
| class _Closure implements Function { |
| bool operator ==(Object other) native "Closure_equals"; |
| |
| int get hashCode { |
| _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 fields whose |
| // offsets must be identical in Dart and C++. |
| |
| // 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 |
| // names do not need to match the C++ names, but they must be private. |
| @pragma("vm:entry-point") |
| var _instantiator_type_arguments; |
| @pragma("vm:entry-point") |
| var _function_type_arguments; |
| @pragma("vm:entry-point") |
| var _delayed_type_arguments; |
| @pragma("vm:entry-point") |
| var _function; |
| @pragma("vm:entry-point") |
| var _context; |
| |
| // Note: _Closure objects are created by VM "magically", without invoking |
| // constructor. So, _Closure default constructor is never compiled and |
| // detection of default-initialized fields is not performed. |
| // As a consequence, VM incorrectly assumes that _hash field is not |
| // nullable and may incorrectly remove 'if (_hash == null)' in get:hashCode. |
| // This initializer makes _hash field nullable even without constructor |
| // compilation. |
| @pragma("vm:entry-point") |
| var _hash = null; |
| } |