v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
struct.h
Go to the documentation of this file.
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_H_
6#define V8_OBJECTS_STRUCT_H_
7
10
11// Has to be the last include (doesn't have include guards):
13
14namespace v8 {
15namespace internal {
16
17class StructBodyDescriptor;
18
19#include "torque-generated/src/objects/struct-tq.inc"
20
21// An abstract superclass, a marker class really, for simple structure classes.
22// It doesn't carry any functionality but allows struct classes to be
23// identified in the type system.
24class Struct : public TorqueGeneratedStruct<Struct, HeapObject> {
25 public:
26 void BriefPrintDetails(std::ostream& os);
27 static_assert(kHeaderSize == HeapObject::kHeaderSize);
28
30};
31
32// Temporary mirror of Struct for subtypes with the new layout.
34 public:
35 void BriefPrintDetails(std::ostream& os);
36
38
41static_assert(sizeof(StructLayout) == sizeof(HeapObjectLayout));
42
44 public:
45 void BriefPrintDetails(std::ostream& os);
46
47 inline Tagged<Object> value1() const;
48 inline void set_value1(Tagged<Object> value,
50
51 inline Tagged<Object> value2() const;
52 inline void set_value2(Tagged<Object> value,
54
57
58 private:
59 friend class TorqueGeneratedTuple2Asserts;
63
64// Support for JavaScript accessors: A pair of a getter and a setter. Each
65// accessor can either be
66// * a JavaScript function or proxy: a real accessor
67// * a FunctionTemplateInfo: a real (lazy) accessor
68// * undefined: considered an accessor by the spec, too, strangely enough
69// * null: an accessor which has not been set
71 public:
73 static DirectHandle<AccessorPair> Copy(Isolate* isolate,
75
76 inline Tagged<Object> get(AccessorComponent component);
77 inline void set(AccessorComponent component, Tagged<Object> value);
78 inline void set(AccessorComponent component, Tagged<Object> value,
79 ReleaseStoreTag tag);
80
81 inline Tagged<Object> getter() const;
82 inline void set_getter(Tagged<Object> value,
85 inline void set_getter(Tagged<Object> value, ReleaseStoreTag,
87
88 inline Tagged<Object> setter() const;
89 inline void set_setter(Tagged<Object> value,
92 inline void set_setter(Tagged<Object> value, ReleaseStoreTag,
94
95 // Note: Returns undefined if the component is not set.
96 static Handle<JSAny> GetComponent(Isolate* isolate,
98 DirectHandle<AccessorPair> accessor_pair,
99 AccessorComponent component);
100
101 // Set both components, skipping arguments which are a JavaScript null.
102 inline void SetComponents(Tagged<Object> getter, Tagged<Object> setter);
103
104 inline bool Equals(Tagged<Object> getter_value, Tagged<Object> setter_value);
105
108
109 private:
110 friend class CodeStubAssembler;
111 friend class V8HeapExplorer;
112 friend class TorqueGeneratedAccessorPairAsserts;
113
117
119 public:
120 inline int start() const;
121 inline void set_start(int value);
122
123 inline int end() const;
124 inline void set_end(int value);
125
126 // Dispatched behavior.
127 void BriefPrintDetails(std::ostream& os);
128
131
132 private:
133 friend class TorqueGeneratedClassPositionsAsserts;
134
138
139} // namespace internal
140} // namespace v8
141
143
144#endif // V8_OBJECTS_STRUCT_H_
PropertyT * setter
PropertyT * getter
TaggedMember< Object > setter_
Definition struct.h:115
TaggedMember< Object > getter_
Definition struct.h:114
TaggedMember< Smi > end_
Definition struct.h:136
TaggedMember< Smi > start_
Definition struct.h:135
static constexpr int kHeaderSize
void BriefPrintDetails(std::ostream &os)
Definition objects.cc:1917
void BriefPrintDetails(std::ostream &os)
Definition objects.cc:1915
TaggedMember< Object > value2_
Definition struct.h:61
TaggedMember< Object > value1_
Definition struct.h:60
int start
int end
@ UPDATE_WRITE_BARRIER
Definition objects.h:55
v8::internal::LoadHandler V8_OBJECT_END
!IsContextMap !IsContextMap native_context
Definition map-inl.h:877
#define DECL_VERIFIER(Name)
#define V8_OBJECT
#define NEVER_READ_ONLY_SPACE
#define DECL_PRINTER(Name)
#define TQ_OBJECT_CONSTRUCTORS(Type)