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