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