• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 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_INTERPRETER_BYTECODE_FLAGS_H_
6 #define V8_INTERPRETER_BYTECODE_FLAGS_H_
7 
8 #include "src/utils.h"
9 
10 namespace v8 {
11 namespace internal {
12 
13 // Forward declarations.
14 class Literal;
15 class AstStringConstants;
16 
17 namespace interpreter {
18 
19 class CreateArrayLiteralFlags {
20  public:
21   class FlagsBits : public BitField8<int, 0, 5> {};
22   class FastCloneSupportedBit : public BitField8<bool, FlagsBits::kNext, 1> {};
23 
24   static uint8_t Encode(bool use_fast_shallow_clone, int runtime_flags);
25 
26  private:
27   DISALLOW_IMPLICIT_CONSTRUCTORS(CreateArrayLiteralFlags);
28 };
29 
30 class CreateObjectLiteralFlags {
31  public:
32   class FlagsBits : public BitField8<int, 0, 5> {};
33   class FastCloneSupportedBit : public BitField8<bool, FlagsBits::kNext, 1> {};
34 
35   static uint8_t Encode(int runtime_flags, bool fast_clone_supported);
36 
37  private:
38   DISALLOW_IMPLICIT_CONSTRUCTORS(CreateObjectLiteralFlags);
39 };
40 
41 class CreateClosureFlags {
42  public:
43   class PretenuredBit : public BitField8<bool, 0, 1> {};
44   class FastNewClosureBit : public BitField8<bool, PretenuredBit::kNext, 1> {};
45 
46   static uint8_t Encode(bool pretenure, bool is_function_scope);
47 
48  private:
49   DISALLOW_IMPLICIT_CONSTRUCTORS(CreateClosureFlags);
50 };
51 
52 #define TYPEOF_LITERAL_LIST(V) \
53   V(Number, number)            \
54   V(String, string)            \
55   V(Symbol, symbol)            \
56   V(Boolean, boolean)          \
57   V(BigInt, bigint)            \
58   V(Undefined, undefined)      \
59   V(Function, function)        \
60   V(Object, object)            \
61   V(Other, other)
62 
63 class TestTypeOfFlags {
64  public:
65   enum class LiteralFlag : uint8_t {
66 #define DECLARE_LITERAL_FLAG(name, _) k##name,
67     TYPEOF_LITERAL_LIST(DECLARE_LITERAL_FLAG)
68 #undef DECLARE_LITERAL_FLAG
69   };
70 
71   static LiteralFlag GetFlagForLiteral(const AstStringConstants* ast_constants,
72                                        Literal* literal);
73   static uint8_t Encode(LiteralFlag literal_flag);
74   static LiteralFlag Decode(uint8_t raw_flag);
75 
76  private:
77   DISALLOW_IMPLICIT_CONSTRUCTORS(TestTypeOfFlags);
78 };
79 
80 class StoreLookupSlotFlags {
81  public:
82   class LanguageModeBit : public BitField8<LanguageMode, 0, 1> {};
83   class LookupHoistingModeBit
84       : public BitField8<bool, LanguageModeBit::kNext, 1> {};
85   STATIC_ASSERT(LanguageModeSize <= LanguageModeBit::kNumValues);
86 
87   static uint8_t Encode(LanguageMode language_mode,
88                         LookupHoistingMode lookup_hoisting_mode);
89 
90  private:
91   DISALLOW_IMPLICIT_CONSTRUCTORS(StoreLookupSlotFlags);
92 };
93 
94 }  // namespace interpreter
95 }  // namespace internal
96 }  // namespace v8
97 
98 #endif  // V8_INTERPRETER_BYTECODE_FLAGS_H_
99