// Copyright 2015 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_OBJECTS_TYPE_HINTS_H_ #define V8_OBJECTS_TYPE_HINTS_H_ #include "src/base/flags.h" #include "src/utils/utils.h" namespace v8 { namespace internal { // Type hints for an binary operation. enum class BinaryOperationHint : uint8_t { kNone, kSignedSmall, kSignedSmallInputs, kSigned32, kNumber, kNumberOrOddball, kString, kBigInt, kAny }; inline size_t hash_value(BinaryOperationHint hint) { return static_cast(hint); } std::ostream& operator<<(std::ostream&, BinaryOperationHint); // Type hints for an compare operation. enum class CompareOperationHint : uint8_t { kNone, kSignedSmall, kNumber, kNumberOrOddball, kInternalizedString, kString, kSymbol, kBigInt, kReceiver, kReceiverOrNullOrUndefined, kAny }; inline size_t hash_value(CompareOperationHint hint) { return static_cast(hint); } std::ostream& operator<<(std::ostream&, CompareOperationHint); // Type hints for for..in statements. enum class ForInHint : uint8_t { kNone, kEnumCacheKeysAndIndices, kEnumCacheKeys, kAny }; std::ostream& operator<<(std::ostream&, ForInHint); enum StringAddFlags { // Omit both parameter checks. STRING_ADD_CHECK_NONE, // Convert parameters when check fails (instead of throwing an exception). STRING_ADD_CONVERT_LEFT, STRING_ADD_CONVERT_RIGHT, }; std::ostream& operator<<(std::ostream& os, const StringAddFlags& flags); } // namespace internal } // namespace v8 #endif // V8_OBJECTS_TYPE_HINTS_H_