LCOV - code coverage report
Current view: top level - src/wasm - wasm-objects-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 32 32 100.0 %
Date: 2017-10-20 Functions: 50 51 98.0 %

          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_

Generated by: LCOV version 1.10