|  | // Copyright (c) 2019, 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. | 
|  |  | 
|  | #ifndef RUNTIME_VM_CODE_ENTRY_KIND_H_ | 
|  | #define RUNTIME_VM_CODE_ENTRY_KIND_H_ | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | // Compiled functions might have several different entry points, which either | 
|  | // perform additional checking on entry into the function or skip some of the | 
|  | // checks normally performed on the entry. | 
|  | // | 
|  | // Which checks are performed and skipped depend on the function and VM mode. | 
|  | enum class CodeEntryKind { | 
|  | // Normal entry into the function. | 
|  | // | 
|  | // Usually such entries perform type checks for all parameters which are not | 
|  | // guaranteed to be type checked on the callee side. This can happen if | 
|  | // parameter type depends on the type parameter of an enclosing class. | 
|  | kNormal, | 
|  |  | 
|  | // Unchecked entry into the function. | 
|  | // | 
|  | // These entries usually skip most of the type checks that normal entries | 
|  | // perform and are used when optimizing compiler can prove that those | 
|  | // checks are not needed at a specific call site. | 
|  | kUnchecked, | 
|  |  | 
|  | // Monomorphic entry into the function. | 
|  | // | 
|  | // In AOT mode we might patch call-site to directly invoke target function, | 
|  | // which would then validate that it is invoked with the expected type of | 
|  | // the receiver. This validation is handled by monomorphic entry, which then | 
|  | // falls through to the normal entry. | 
|  | kMonomorphic, | 
|  |  | 
|  | // Similar to monomorphic entry but with a fallthrough into unchecked entry. | 
|  | kMonomorphicUnchecked, | 
|  | }; | 
|  |  | 
|  | }  // namespace dart | 
|  |  | 
|  | #endif  // RUNTIME_VM_CODE_ENTRY_KIND_H_ |