Line data Source code
1 : // Copyright 2017 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_WASM_OBJECTS_INL_H_
6 : #define V8_WASM_OBJECTS_INL_H_
7 :
8 : #include "src/heap/heap-inl.h"
9 : #include "src/wasm/wasm-objects.h"
10 :
11 : namespace v8 {
12 : namespace internal {
13 :
14 : // Has to be the last include (doesn't have include guards)
15 : #include "src/objects/object-macros.h"
16 :
17 : CAST_ACCESSOR(WasmInstanceObject)
18 : CAST_ACCESSOR(WasmMemoryObject)
19 : CAST_ACCESSOR(WasmModuleObject)
20 : CAST_ACCESSOR(WasmTableObject)
21 :
22 : #define OPTIONAL_ACCESSORS(holder, name, type, offset) \
23 : bool holder::has_##name() { \
24 : return !READ_FIELD(this, offset)->IsUndefined(GetIsolate()); \
25 : } \
26 : ACCESSORS(holder, name, type, offset)
27 :
28 : // WasmModuleObject
29 2121688 : ACCESSORS(WasmModuleObject, compiled_module, WasmCompiledModule,
30 : kCompiledModuleOffset)
31 :
32 : // WasmTableObject
33 41730 : ACCESSORS(WasmTableObject, functions, FixedArray, kFunctionsOffset)
34 10390 : ACCESSORS(WasmTableObject, maximum_length, Object, kMaximumLengthOffset)
35 22160 : ACCESSORS(WasmTableObject, dispatch_tables, FixedArray, kDispatchTablesOffset)
36 :
37 : // WasmMemoryObject
38 114340 : ACCESSORS(WasmMemoryObject, array_buffer, JSArrayBuffer, kArrayBufferOffset)
39 19809 : SMI_ACCESSORS(WasmMemoryObject, maximum_pages, kMaximumPagesOffset)
40 105240 : OPTIONAL_ACCESSORS(WasmMemoryObject, instances, WeakFixedArray,
41 : kInstancesOffset)
42 :
43 : // WasmInstanceObject
44 4849805 : ACCESSORS(WasmInstanceObject, wasm_context, Managed<WasmContext>,
45 : kWasmContextOffset)
46 2155036 : ACCESSORS(WasmInstanceObject, compiled_module, WasmCompiledModule,
47 : kCompiledModuleOffset)
48 27013601 : ACCESSORS(WasmInstanceObject, exports_object, JSObject, kExportsObjectOffset)
49 314305 : OPTIONAL_ACCESSORS(WasmInstanceObject, memory_object, WasmMemoryObject,
50 : kMemoryObjectOffset)
51 166420 : OPTIONAL_ACCESSORS(WasmInstanceObject, memory_buffer, JSArrayBuffer,
52 : kMemoryBufferOffset)
53 14975 : ACCESSORS(WasmInstanceObject, globals_buffer, JSArrayBuffer,
54 : kGlobalsBufferOffset)
55 144712 : OPTIONAL_ACCESSORS(WasmInstanceObject, debug_info, WasmDebugInfo,
56 : kDebugInfoOffset)
57 9500 : OPTIONAL_ACCESSORS(WasmInstanceObject, function_tables, FixedArray,
58 : kFunctionTablesOffset)
59 9500 : OPTIONAL_ACCESSORS(WasmInstanceObject, signature_tables, FixedArray,
60 : kSignatureTablesOffset)
61 658125 : ACCESSORS(WasmInstanceObject, directly_called_instances, FixedArray,
62 : kDirectlyCalledInstancesOffset)
63 769315 : ACCESSORS(WasmInstanceObject, js_imports_table, FixedArray,
64 : kJsImportsTableOffset)
65 :
66 : // WasmSharedModuleData
67 1057741 : ACCESSORS(WasmSharedModuleData, module_bytes, SeqOneByteString,
68 : kModuleBytesOffset)
69 41981 : ACCESSORS(WasmSharedModuleData, script, Script, kScriptOffset)
70 1358 : OPTIONAL_ACCESSORS(WasmSharedModuleData, asm_js_offset_table, ByteArray,
71 : kAsmJsOffsetTableOffset)
72 153514 : OPTIONAL_ACCESSORS(WasmSharedModuleData, breakpoint_infos, FixedArray,
73 : kBreakPointInfosOffset)
74 :
75 32903 : OPTIONAL_ACCESSORS(WasmSharedModuleData, lazy_compilation_orchestrator, Foreign,
76 : kLazyCompilationOrchestratorOffset)
77 :
78 795 : OPTIONAL_ACCESSORS(WasmDebugInfo, locals_names, FixedArray, kLocalsNamesOffset)
79 672 : OPTIONAL_ACCESSORS(WasmDebugInfo, c_wasm_entries, FixedArray,
80 : kCWasmEntriesOffset)
81 576 : OPTIONAL_ACCESSORS(WasmDebugInfo, c_wasm_entry_map, Managed<wasm::SignatureMap>,
82 : kCWasmEntryMapOffset)
83 :
84 : #undef OPTIONAL_ACCESSORS
85 :
86 : #define FORWARD_SHARED(type, name) \
87 : type WasmCompiledModule::name() { return shared()->name(); }
88 1340622 : FORWARD_SHARED(SeqOneByteString*, module_bytes)
89 1768064 : FORWARD_SHARED(wasm::WasmModule*, module)
90 83962 : FORWARD_SHARED(Script*, script)
91 87518 : FORWARD_SHARED(bool, is_asm_js)
92 : #undef FORWARD_SHARED
93 :
94 : #define WCM_OBJECT_OR_WEAK(TYPE, NAME, ID, TYPE_CHECK, SETTER_MODIFIER) \
95 : Handle<TYPE> WasmCompiledModule::NAME() const { \
96 : return handle(ptr_to_##NAME()); \
97 : } \
98 : \
99 : MaybeHandle<TYPE> WasmCompiledModule::maybe_##NAME() const { \
100 : if (has_##NAME()) return NAME(); \
101 : return MaybeHandle<TYPE>(); \
102 : } \
103 : \
104 : TYPE* WasmCompiledModule::maybe_ptr_to_##NAME() const { \
105 : Object* obj = get(ID); \
106 : if (!(TYPE_CHECK)) return nullptr; \
107 : return TYPE::cast(obj); \
108 : } \
109 : \
110 : TYPE* WasmCompiledModule::ptr_to_##NAME() const { \
111 : Object* obj = get(ID); \
112 : DCHECK(TYPE_CHECK); \
113 : return TYPE::cast(obj); \
114 : } \
115 : \
116 : bool WasmCompiledModule::has_##NAME() const { \
117 : Object* obj = get(ID); \
118 : return TYPE_CHECK; \
119 : } \
120 : \
121 : void WasmCompiledModule::reset_##NAME() { set_undefined(ID); } \
122 : \
123 : void WasmCompiledModule::set_##NAME(Handle<TYPE> value) { \
124 : set_ptr_to_##NAME(*value); \
125 : } \
126 : void WasmCompiledModule::set_ptr_to_##NAME(TYPE* value) { set(ID, value); }
127 :
128 : #define WCM_OBJECT(TYPE, NAME) \
129 : WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, obj->Is##TYPE(), public)
130 :
131 : #define WCM_CONST_OBJECT(TYPE, NAME) \
132 : WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, obj->Is##TYPE(), private)
133 :
134 : #define WCM_WASM_OBJECT(TYPE, NAME) \
135 : WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, TYPE::Is##TYPE(obj), private)
136 :
137 : #define WCM_SMALL_CONST_NUMBER(TYPE, NAME) \
138 : TYPE WasmCompiledModule::NAME() const { \
139 : return static_cast<TYPE>(Smi::ToInt(get(kID_##NAME))); \
140 : } \
141 : \
142 : void WasmCompiledModule::set_##NAME(TYPE value) { \
143 : set(kID_##NAME, Smi::FromInt(value)); \
144 : }
145 :
146 : #define WCM_WEAK_LINK(TYPE, NAME) \
147 : WCM_OBJECT_OR_WEAK(WeakCell, weak_##NAME, kID_##NAME, obj->IsWeakCell(), \
148 : public) \
149 : \
150 : Handle<TYPE> WasmCompiledModule::NAME() const { \
151 : return handle(TYPE::cast(weak_##NAME()->value())); \
152 : }
153 :
154 : #define DEFINITION(KIND, TYPE, NAME) WCM_##KIND(TYPE, NAME)
155 11568066 : WCM_PROPERTY_TABLE(DEFINITION)
156 : #undef DECLARATION
157 :
158 : #undef WCM_CONST_OBJECT
159 : #undef WCM_LARGE_NUMBER
160 : #undef WCM_OBJECT_OR_WEAK
161 : #undef WCM_SMALL_CONST_NUMBER
162 : #undef WCM_WEAK_LINK
163 :
164 9510 : uint32_t WasmTableObject::current_length() { return functions()->length(); }
165 :
166 : bool WasmTableObject::has_maximum_length() {
167 : return maximum_length()->Number() >= 0;
168 : }
169 :
170 : bool WasmMemoryObject::has_maximum_pages() { return maximum_pages() >= 0; }
171 :
172 : void WasmCompiledModule::ReplaceCodeTableForTesting(
173 : Handle<FixedArray> testing_table) {
174 : set_code_table(testing_table);
175 : }
176 :
177 : #include "src/objects/object-macros-undef.h"
178 :
179 : } // namespace internal
180 : } // namespace v8
181 :
182 : #endif // V8_WASM_OBJECTS_INL_H_
|