1// Copyright 2018 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_OBJECTS_STRUCT_INL_H_
6#define V8_OBJECTS_STRUCT_INL_H_
7
8#include "src/objects/struct.h"
9
10#include "src/heap/heap-write-barrier-inl.h"
11#include "src/objects/objects-inl.h"
12#include "src/objects/oddball.h"
13#include "src/roots/roots-inl.h"
14
15// Has to be the last include (doesn't have include guards):
16#include "src/objects/object-macros.h"
17
18namespace v8 {
19namespace internal {
20
21#include "torque-generated/src/objects/struct-tq-inl.inc"
22
23TQ_OBJECT_CONSTRUCTORS_IMPL(Struct)
24TQ_OBJECT_CONSTRUCTORS_IMPL(Tuple2)
25TQ_OBJECT_CONSTRUCTORS_IMPL(AccessorPair)
26
27NEVER_READ_ONLY_SPACE_IMPL(AccessorPair)
28
29TQ_OBJECT_CONSTRUCTORS_IMPL(ClassPositions)
30
31Object AccessorPair::get(AccessorComponent component) {
32  return component == ACCESSOR_GETTER ? getter() : setter();
33}
34
35void AccessorPair::set(AccessorComponent component, Object value) {
36  if (component == ACCESSOR_GETTER) {
37    set_getter(value);
38  } else {
39    set_setter(value);
40  }
41}
42
43void AccessorPair::set(AccessorComponent component, Object value,
44                       ReleaseStoreTag tag) {
45  if (component == ACCESSOR_GETTER) {
46    set_getter(value, tag);
47  } else {
48    set_setter(value, tag);
49  }
50}
51
52RELEASE_ACQUIRE_ACCESSORS(AccessorPair, getter, Object, kGetterOffset)
53RELEASE_ACQUIRE_ACCESSORS(AccessorPair, setter, Object, kSetterOffset)
54
55void AccessorPair::SetComponents(Object getter, Object setter) {
56  if (!getter.IsNull()) set_getter(getter);
57  if (!setter.IsNull()) set_setter(setter);
58}
59
60bool AccessorPair::Equals(Object getter_value, Object setter_value) {
61  return (getter() == getter_value) && (setter() == setter_value);
62}
63
64}  // namespace internal
65}  // namespace v8
66
67#include "src/objects/object-macros-undef.h"
68
69#endif  // V8_OBJECTS_STRUCT_INL_H_
70