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 #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_WASM_OBJECT_ACCESS_H_ 10 #define V8_WASM_OBJECT_ACCESS_H_ 11 12 #include "src/common/globals.h" 13 #include "src/objects/fixed-array.h" 14 #include "src/objects/js-function.h" 15 #include "src/objects/js-objects.h" 16 #include "src/objects/shared-function-info.h" 17 18 namespace v8 { 19 namespace internal { 20 namespace wasm { 21 22 class ObjectAccess : public AllStatic { 23 public: 24 // Convert an offset into an object to an offset into a tagged object. ToTagged(int offset)25 static constexpr int ToTagged(int offset) { return offset - kHeapObjectTag; } 26 27 // Get the offset into a fixed array for a given {index}. ElementOffsetInTaggedFixedArray(int index)28 static constexpr int ElementOffsetInTaggedFixedArray(int index) { 29 return ToTagged(FixedArray::OffsetOfElementAt(index)); 30 } 31 32 // Get the offset of the context stored in a {JSFunction} object. ContextOffsetInTaggedJSFunction()33 static constexpr int ContextOffsetInTaggedJSFunction() { 34 return ToTagged(JSFunction::kContextOffset); 35 } 36 37 // Get the offset of the shared function info in a {JSFunction} object. SharedFunctionInfoOffsetInTaggedJSFunction()38 static constexpr int SharedFunctionInfoOffsetInTaggedJSFunction() { 39 return ToTagged(JSFunction::kSharedFunctionInfoOffset); 40 } 41 42 // Get the offset of the formal parameter count in a {SharedFunctionInfo} 43 // object. FormalParameterCountOffsetInSharedFunctionInfo()44 static constexpr int FormalParameterCountOffsetInSharedFunctionInfo() { 45 return ToTagged(SharedFunctionInfo::kFormalParameterCountOffset); 46 } 47 48 // Get the offset of the flags in a {SharedFunctionInfo} object. FlagsOffsetInSharedFunctionInfo()49 static constexpr int FlagsOffsetInSharedFunctionInfo() { 50 return ToTagged(SharedFunctionInfo::kFlagsOffset); 51 } 52 }; 53 54 } // namespace wasm 55 } // namespace internal 56 } // namespace v8 57 58 #endif // V8_WASM_OBJECT_ACCESS_H_ 59