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   kSigned32,
     19   kNumberOrOddball,
     20   kString,
     21   kAny
     22 };
     23 
     24 inline size_t hash_value(BinaryOperationHint hint) {
     25   return static_cast<unsigned>(hint);
     26 }
     27 
     28 std::ostream& operator<<(std::ostream&, BinaryOperationHint);
     29 
     30 // Type hints for an compare operation.
     31 enum class CompareOperationHint : uint8_t {
     32   kNone,
     33   kSignedSmall,
     34   kNumber,
     35   kNumberOrOddball,
     36   kInternalizedString,
     37   kString,
     38   kReceiver,
     39   kAny
     40 };
     41 
     42 inline size_t hash_value(CompareOperationHint hint) {
     43   return static_cast<unsigned>(hint);
     44 }
     45 
     46 std::ostream& operator<<(std::ostream&, CompareOperationHint);
     47 
     48 // Type hints for the ToBoolean type conversion.
     49 enum class ToBooleanHint : uint16_t {
     50   kNone = 0u,
     51   kUndefined = 1u << 0,
     52   kBoolean = 1u << 1,
     53   kNull = 1u << 2,
     54   kSmallInteger = 1u << 3,
     55   kReceiver = 1u << 4,
     56   kString = 1u << 5,
     57   kSymbol = 1u << 6,
     58   kHeapNumber = 1u << 7,
     59   kAny = kUndefined | kBoolean | kNull | kSmallInteger | kReceiver | kString |
     60          kSymbol | kHeapNumber,
     61   kNeedsMap = kReceiver | kString | kSymbol | kHeapNumber,
     62   kCanBeUndetectable = kReceiver,
     63 };
     64 
     65 std::ostream& operator<<(std::ostream&, ToBooleanHint);
     66 std::string ToString(ToBooleanHint);
     67 
     68 typedef base::Flags<ToBooleanHint, uint16_t> ToBooleanHints;
     69 
     70 std::ostream& operator<<(std::ostream&, ToBooleanHints);
     71 std::string ToString(ToBooleanHints);
     72 
     73 DEFINE_OPERATORS_FOR_FLAGS(ToBooleanHints)
     74 
     75 enum StringAddFlags {
     76   // Omit both parameter checks.
     77   STRING_ADD_CHECK_NONE = 0,
     78   // Check left parameter.
     79   STRING_ADD_CHECK_LEFT = 1 << 0,
     80   // Check right parameter.
     81   STRING_ADD_CHECK_RIGHT = 1 << 1,
     82   // Check both parameters.
     83   STRING_ADD_CHECK_BOTH = STRING_ADD_CHECK_LEFT | STRING_ADD_CHECK_RIGHT,
     84   // Convert parameters when check fails (instead of throwing an exception).
     85   STRING_ADD_CONVERT = 1 << 2,
     86   STRING_ADD_CONVERT_LEFT = STRING_ADD_CHECK_LEFT | STRING_ADD_CONVERT,
     87   STRING_ADD_CONVERT_RIGHT = STRING_ADD_CHECK_RIGHT | STRING_ADD_CONVERT
     88 };
     89 
     90 std::ostream& operator<<(std::ostream& os, const StringAddFlags& flags);
     91 
     92 }  // namespace internal
     93 }  // namespace v8
     94 
     95 #endif  // V8_TYPE_HINTS_H_
     96