LCOV - code coverage report
Current view: top level - src/objects - api-callbacks-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 69 69 100.0 %
Date: 2019-01-20 Functions: 74 76 97.4 %

          Line data    Source code
       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_API_CALLBACKS_INL_H_
       6             : #define V8_OBJECTS_API_CALLBACKS_INL_H_
       7             : 
       8             : #include "src/objects/api-callbacks.h"
       9             : 
      10             : #include "src/heap/heap-inl.h"
      11             : #include "src/heap/heap-write-barrier.h"
      12             : #include "src/objects/foreign-inl.h"
      13             : #include "src/objects/name.h"
      14             : #include "src/objects/templates.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 internal {
      21             : 
      22        7812 : OBJECT_CONSTRUCTORS_IMPL(AccessCheckInfo, Struct)
      23     3830260 : OBJECT_CONSTRUCTORS_IMPL(AccessorInfo, Struct)
      24     4322924 : OBJECT_CONSTRUCTORS_IMPL(InterceptorInfo, Struct)
      25    12275198 : OBJECT_CONSTRUCTORS_IMPL(CallHandlerInfo, Tuple3)
      26             : 
      27     1915130 : CAST_ACCESSOR(AccessorInfo)
      28        3906 : CAST_ACCESSOR(AccessCheckInfo)
      29     2161462 : CAST_ACCESSOR(InterceptorInfo)
      30     6137602 : CAST_ACCESSOR(CallHandlerInfo)
      31             : 
      32     1329734 : ACCESSORS(AccessorInfo, name, Name, kNameOffset)
      33     5960976 : SMI_ACCESSORS(AccessorInfo, flags, kFlagsOffset)
      34     2973786 : ACCESSORS(AccessorInfo, expected_receiver_type, Object,
      35             :           kExpectedReceiverTypeOffset)
      36             : 
      37     4644556 : ACCESSORS_CHECKED2(AccessorInfo, getter, Object, kGetterOffset, true,
      38             :                    Foreign::IsNormalized(value))
      39     3747679 : ACCESSORS_CHECKED2(AccessorInfo, setter, Object, kSetterOffset, true,
      40             :                    Foreign::IsNormalized(value));
      41      455335 : ACCESSORS(AccessorInfo, js_getter, Object, kJsGetterOffset)
      42     4470732 : ACCESSORS(AccessorInfo, data, Object, kDataOffset)
      43             : 
      44             : bool AccessorInfo::has_getter() {
      45     1282404 :   bool result = getter() != Smi::kZero;
      46             :   DCHECK_EQ(result,
      47             :             getter() != Smi::kZero &&
      48             :                 Foreign::cast(getter())->foreign_address() != kNullAddress);
      49             :   return result;
      50             : }
      51             : 
      52             : bool AccessorInfo::has_setter() {
      53      495464 :   bool result = setter() != Smi::kZero;
      54             :   DCHECK_EQ(result,
      55             :             setter() != Smi::kZero &&
      56             :                 Foreign::cast(setter())->foreign_address() != kNullAddress);
      57             :   return result;
      58             : }
      59             : 
      60      128283 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, all_can_read,
      61             :                     AccessorInfo::AllCanReadBit)
      62      127917 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, all_can_write,
      63             :                     AccessorInfo::AllCanWriteBit)
      64     1004126 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, is_special_data_property,
      65             :                     AccessorInfo::IsSpecialDataPropertyBit)
      66     2266427 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, replace_on_access,
      67             :                     AccessorInfo::ReplaceOnAccessBit)
      68     3178990 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, is_sloppy, AccessorInfo::IsSloppyBit)
      69      371355 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, getter_side_effect_type,
      70             :                     AccessorInfo::GetterSideEffectTypeBits)
      71             : 
      72          41 : SideEffectType AccessorInfo::setter_side_effect_type() const {
      73          82 :   return SetterSideEffectTypeBits::decode(flags());
      74             : }
      75             : 
      76       92685 : void AccessorInfo::set_setter_side_effect_type(SideEffectType value) {
      77             :   // We do not support describing setters as having no side effect, since
      78             :   // calling set accessors must go through a store bytecode. Store bytecodes
      79             :   // support checking receivers for temporary objects, but still expect
      80             :   // the receiver to be written to.
      81       92685 :   CHECK_NE(value, SideEffectType::kHasNoSideEffect);
      82      185370 :   set_flags(SetterSideEffectTypeBits::update(flags(), value));
      83       92685 : }
      84             : 
      85      974460 : BIT_FIELD_ACCESSORS(AccessorInfo, flags, initial_property_attributes,
      86             :                     AccessorInfo::InitialAttributesBits)
      87             : 
      88      889114 : bool AccessorInfo::IsCompatibleReceiver(Object receiver) {
      89      889114 :   if (!HasExpectedReceiverType()) return true;
      90         348 :   if (!receiver->IsJSObject()) return false;
      91         348 :   return FunctionTemplateInfo::cast(expected_receiver_type())
      92         348 :       ->IsTemplateFor(JSObject::cast(receiver)->map());
      93             : }
      94             : 
      95      986490 : bool AccessorInfo::HasExpectedReceiverType() {
      96     1972980 :   return expected_receiver_type()->IsFunctionTemplateInfo();
      97             : }
      98             : 
      99        8091 : ACCESSORS(AccessCheckInfo, callback, Object, kCallbackOffset)
     100        2250 : ACCESSORS(AccessCheckInfo, named_interceptor, Object, kNamedInterceptorOffset)
     101        3150 : ACCESSORS(AccessCheckInfo, indexed_interceptor, Object,
     102             :           kIndexedInterceptorOffset)
     103        8562 : ACCESSORS(AccessCheckInfo, data, Object, kDataOffset)
     104             : 
     105     2601627 : ACCESSORS(InterceptorInfo, getter, Object, kGetterOffset)
     106     2781563 : ACCESSORS(InterceptorInfo, setter, Object, kSetterOffset)
     107      754774 : ACCESSORS(InterceptorInfo, query, Object, kQueryOffset)
     108        1950 : ACCESSORS(InterceptorInfo, descriptor, Object, kDescriptorOffset)
     109         894 : ACCESSORS(InterceptorInfo, deleter, Object, kDeleterOffset)
     110        3655 : ACCESSORS(InterceptorInfo, enumerator, Object, kEnumeratorOffset)
     111        1260 : ACCESSORS(InterceptorInfo, definer, Object, kDefinerOffset)
     112     3708883 : ACCESSORS(InterceptorInfo, data, Object, kDataOffset)
     113     1852836 : SMI_ACCESSORS(InterceptorInfo, flags, kFlagsOffset)
     114        2538 : BOOL_ACCESSORS(InterceptorInfo, flags, can_intercept_symbols,
     115             :                kCanInterceptSymbolsBit)
     116        3682 : BOOL_ACCESSORS(InterceptorInfo, flags, all_can_read, kAllCanReadBit)
     117     1834378 : BOOL_ACCESSORS(InterceptorInfo, flags, non_masking, kNonMasking)
     118        2422 : BOOL_ACCESSORS(InterceptorInfo, flags, is_named, kNamed)
     119        2494 : BOOL_ACCESSORS(InterceptorInfo, flags, has_no_side_effect, kHasNoSideEffect)
     120             : 
     121    54552881 : ACCESSORS(CallHandlerInfo, callback, Object, kCallbackOffset)
     122    36184614 : ACCESSORS(CallHandlerInfo, js_callback, Object, kJsCallbackOffset)
     123    43639934 : ACCESSORS(CallHandlerInfo, data, Object, kDataOffset)
     124             : 
     125         144 : bool CallHandlerInfo::IsSideEffectFreeCallHandlerInfo() const {
     126         144 :   ReadOnlyRoots roots = GetReadOnlyRoots();
     127             :   DCHECK(map() == roots.side_effect_call_handler_info_map() ||
     128             :          map() == roots.side_effect_free_call_handler_info_map() ||
     129             :          map() == roots.next_call_side_effect_free_call_handler_info_map());
     130         144 :   return map() == roots.side_effect_free_call_handler_info_map();
     131             : }
     132             : 
     133             : bool CallHandlerInfo::IsSideEffectCallHandlerInfo() const {
     134             :   ReadOnlyRoots roots = GetReadOnlyRoots();
     135             :   DCHECK(map() == roots.side_effect_call_handler_info_map() ||
     136             :          map() == roots.side_effect_free_call_handler_info_map() ||
     137             :          map() == roots.next_call_side_effect_free_call_handler_info_map());
     138             :   return map() == roots.side_effect_call_handler_info_map();
     139             : }
     140             : 
     141          10 : void CallHandlerInfo::SetNextCallHasNoSideEffect() {
     142             :   set_map(
     143          20 :       GetReadOnlyRoots().next_call_side_effect_free_call_handler_info_map());
     144          10 : }
     145             : 
     146         139 : bool CallHandlerInfo::NextCallHasNoSideEffect() {
     147         139 :   ReadOnlyRoots roots = GetReadOnlyRoots();
     148         139 :   if (map() == roots.next_call_side_effect_free_call_handler_info_map()) {
     149          10 :     set_map(roots.side_effect_call_handler_info_map());
     150          10 :     return true;
     151             :   }
     152             :   return false;
     153             : }
     154             : 
     155             : }  // namespace internal
     156             : }  // namespace v8
     157             : 
     158             : #include "src/objects/object-macros-undef.h"
     159             : 
     160             : #endif  // V8_OBJECTS_API_CALLBACKS_INL_H_

Generated by: LCOV version 1.10