| // 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_ |