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 #include "src/interpreter/bytecode-flags.h"
6 
7 #include "src/code-stubs.h"
8 
9 namespace v8 {
10 namespace internal {
11 namespace interpreter {
12 
13 // static
Encode(bool use_fast_shallow_clone,int runtime_flags)14 uint8_t CreateArrayLiteralFlags::Encode(bool use_fast_shallow_clone,
15                                         int runtime_flags) {
16   uint8_t result = FlagsBits::encode(runtime_flags);
17   result |= FastShallowCloneBit::encode(use_fast_shallow_clone);
18   return result;
19 }
20 
21 // static
Encode(bool fast_clone_supported,int properties_count,int runtime_flags)22 uint8_t CreateObjectLiteralFlags::Encode(bool fast_clone_supported,
23                                          int properties_count,
24                                          int runtime_flags) {
25   uint8_t result = FlagsBits::encode(runtime_flags);
26   if (fast_clone_supported) {
27     STATIC_ASSERT(
28         FastCloneShallowObjectStub::kMaximumClonedProperties <=
29         1 << CreateObjectLiteralFlags::FastClonePropertiesCountBits::kShift);
30     DCHECK_LE(properties_count,
31               FastCloneShallowObjectStub::kMaximumClonedProperties);
32     result |= CreateObjectLiteralFlags::FastClonePropertiesCountBits::encode(
33         properties_count);
34   }
35   return result;
36 }
37 
38 // static
Encode(bool pretenure,bool is_function_scope)39 uint8_t CreateClosureFlags::Encode(bool pretenure, bool is_function_scope) {
40   uint8_t result = PretenuredBit::encode(pretenure);
41   if (!FLAG_always_opt && !FLAG_prepare_always_opt &&
42       pretenure == NOT_TENURED && is_function_scope) {
43     result |= FastNewClosureBit::encode(true);
44   }
45   return result;
46 }
47 
48 }  // namespace interpreter
49 }  // namespace internal
50 }  // namespace v8
51