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
9namespace v8 {
10namespace internal {
11namespace interpreter {
12
13// static
14uint8_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
22uint8_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
39uint8_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