1 // Copyright 2021 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 #if !V8_ENABLE_WEBASSEMBLY
6 #error This header should only be included if WebAssembly is enabled.
7 #endif  // !V8_ENABLE_WEBASSEMBLY
8 
9 #ifndef V8_DEBUG_DEBUG_WASM_OBJECTS_H_
10 #define V8_DEBUG_DEBUG_WASM_OBJECTS_H_
11 
12 #include <memory>
13 
14 #include "src/objects/js-objects.h"
15 
16 // Has to be the last include (doesn't have include guards):
17 #include "src/objects/object-macros.h"
18 
19 namespace v8 {
20 namespace debug {
21 class ScopeIterator;
22 }  // namespace debug
23 
24 namespace internal {
25 namespace wasm {
26 class WasmValue;
27 }  // namespace wasm
28 
29 #include "torque-generated/src/debug/debug-wasm-objects-tq.inc"
30 
31 class ArrayList;
32 class WasmFrame;
33 class WasmInstanceObject;
34 class WasmModuleObject;
35 class WasmTableObject;
36 
37 class WasmValueObject : public JSObject {
38  public:
39   DECL_CAST(WasmValueObject)
40 
41   DECL_ACCESSORS(type, String)
42   DECL_ACCESSORS(value, Object)
43 
44   // Dispatched behavior.
45   DECL_PRINTER(WasmValueObject)
46   DECL_VERIFIER(WasmValueObject)
47 
48 // Layout description.
49 #define WASM_VALUE_FIELDS(V)   \
50   V(kTypeOffset, kTaggedSize)  \
51   V(kValueOffset, kTaggedSize) \
52   V(kSize, 0)
53   DEFINE_FIELD_OFFSET_CONSTANTS(JSObject::kHeaderSize, WASM_VALUE_FIELDS)
54 #undef WASM_VALUE_FIELDS
55 
56   // Indices of in-object properties.
57   static constexpr int kTypeIndex = 0;
58   static constexpr int kValueIndex = 1;
59 
60   static Handle<WasmValueObject> New(Isolate* isolate, Handle<String> type,
61                                      Handle<Object> value);
62   static Handle<WasmValueObject> New(Isolate* isolate,
63                                      const wasm::WasmValue& value,
64                                      Handle<WasmModuleObject> module);
65 
66   OBJECT_CONSTRUCTORS(WasmValueObject, JSObject);
67 };
68 
69 Handle<JSObject> GetWasmDebugProxy(WasmFrame* frame);
70 
71 std::unique_ptr<debug::ScopeIterator> GetWasmScopeIterator(WasmFrame* frame);
72 
73 Handle<String> GetWasmFunctionDebugName(Isolate* isolate,
74                                         Handle<WasmInstanceObject> instance,
75                                         uint32_t func_index);
76 
77 Handle<ArrayList> AddWasmInstanceObjectInternalProperties(
78     Isolate* isolate, Handle<ArrayList> result,
79     Handle<WasmInstanceObject> instance);
80 
81 Handle<ArrayList> AddWasmModuleObjectInternalProperties(
82     Isolate* isolate, Handle<ArrayList> result,
83     Handle<WasmModuleObject> module_object);
84 
85 Handle<ArrayList> AddWasmTableObjectInternalProperties(
86     Isolate* isolate, Handle<ArrayList> result, Handle<WasmTableObject> table);
87 
88 }  // namespace internal
89 }  // namespace v8
90 
91 #include "src/objects/object-macros-undef.h"
92 
93 #endif  // V8_DEBUG_DEBUG_WASM_OBJECTS_H_
94