Home | History | Annotate | Download | only in src
      1 // Copyright 2015 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_TYPE_HINTS_H_
      6 #define V8_TYPE_HINTS_H_
      7 
      8 #include "src/base/flags.h"
      9 #include "src/utils.h"
     10 
     11 namespace v8 {
     12 namespace internal {
     13 
     14 // Type hints for an binary operation.
     15 enum class BinaryOperationHint : uint8_t {
     16   kNone,
     17   kSignedSmall,
     18   kSignedSmallInputs,
     19   kSigned32,
     20   kNumber,
     21   kNumberOrOddball,
     22   kString,
     23   kBigInt,
     24   kAny
     25 };
     26 
     27 inline size_t hash_value(BinaryOperationHint hint) {
     28   return static_cast<unsigned>(hint);
     29 }
     30 
     31 std::ostream& operator<<(std::ostream&, BinaryOperationHint);
     32 
     33 // Type hints for an compare operation.
     34 enum class CompareOperationHint : uint8_t {
     35   kNone,
     36   kSignedSmall,
     37   kNumber,
     38   kNumberOrOddball,
     39   kInternalizedString,
     40   kString,
     41   kSymbol,
     42   kBigInt,
     43   kReceiver,
     44   kAny
     45 };
     46 
     47 inline size_t hash_value(CompareOperationHint hint) {
     48   return static_cast<unsigned>(hint);
     49 }
     50 
     51 std::ostream& operator<<(std::ostream&, CompareOperationHint);
     52 
     53 // Type hints for for..in statements.
     54 enum class ForInHint : uint8_t {
     55   kNone,
     56   kEnumCacheKeysAndIndices,
     57   kEnumCacheKeys,
     58   kAny
     59 };
     60 
     61 std::ostream& operator<<(std::ostream&, ForInHint);
     62 
     63 enum StringAddFlags {
     64   // Omit both parameter checks.
     65   STRING_ADD_CHECK_NONE,
     66   // Convert parameters when check fails (instead of throwing an exception).
     67   STRING_ADD_CONVERT_LEFT,
     68   STRING_ADD_CONVERT_RIGHT,
     69 };
     70 
     71 std::ostream& operator<<(std::ostream& os, const StringAddFlags& flags);
     72 
     73 }  // namespace internal
     74 }  // namespace v8
     75 
     76 #endif  // V8_TYPE_HINTS_H_
     77