Files
sdk/runtime/lib/function.dart
T
Samir Jindel 5572df1458 [vm/precomp] Fix name of vm:entry-point.
Change-Id: I907e59a9df9407f924c0518a185d5b28ab46e381
Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try,vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/69971
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-08-16 15:07:51 +00:00

53 lines
1.8 KiB
Dart

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