// 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 {
    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 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;
}
