LCOV - code coverage report
Current view: top level - src/objects - templates-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 60 61 98.4 %
Date: 2019-04-19 Functions: 41 42 97.6 %

          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_TEMPLATES_INL_H_
       6             : #define V8_OBJECTS_TEMPLATES_INL_H_
       7             : 
       8             : #include "src/objects/templates.h"
       9             : 
      10             : #include "src/heap/heap-write-barrier-inl.h"
      11             : #include "src/objects/oddball.h"
      12             : #include "src/objects/shared-function-info-inl.h"
      13             : 
      14             : // Has to be the last include (doesn't have include guards):
      15             : #include "src/objects/object-macros.h"
      16             : 
      17             : namespace v8 {
      18             : namespace internal {
      19             : 
      20             : OBJECT_CONSTRUCTORS_IMPL(TemplateInfo, Struct)
      21             : OBJECT_CONSTRUCTORS_IMPL(FunctionTemplateInfo, TemplateInfo)
      22             : OBJECT_CONSTRUCTORS_IMPL(ObjectTemplateInfo, TemplateInfo)
      23             : OBJECT_CONSTRUCTORS_IMPL(FunctionTemplateRareData, Struct)
      24             : 
      25             : NEVER_READ_ONLY_SPACE_IMPL(TemplateInfo)
      26             : 
      27    22718624 : ACCESSORS(TemplateInfo, tag, Object, kTagOffset)
      28    29092678 : ACCESSORS(TemplateInfo, serial_number, Object, kSerialNumberOffset)
      29    10054132 : SMI_ACCESSORS(TemplateInfo, number_of_properties, kNumberOfPropertiesOffset)
      30    17248689 : ACCESSORS(TemplateInfo, property_list, Object, kPropertyListOffset)
      31     4811697 : ACCESSORS(TemplateInfo, property_accessors, Object, kPropertyAccessorsOffset)
      32             : 
      33    20688681 : ACCESSORS(FunctionTemplateInfo, call_code, Object, kCallCodeOffset)
      34      395435 : ACCESSORS(FunctionTemplateInfo, class_name, Object, kClassNameOffset)
      35     3259009 : ACCESSORS(FunctionTemplateInfo, signature, Object, kSignatureOffset)
      36    27708327 : ACCESSORS(FunctionTemplateInfo, shared_function_info, Object,
      37             :           kSharedFunctionInfoOffset)
      38    41087570 : ACCESSORS(FunctionTemplateInfo, rare_data, HeapObject,
      39             :           kFunctionTemplateRareDataOffset)
      40    18595247 : ACCESSORS(FunctionTemplateInfo, cached_property_name, Object,
      41             :           kCachedPropertyNameOffset)
      42     7394092 : SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset)
      43           0 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
      44             :                kHiddenPrototypeBit)
      45     7394522 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, undetectable, kUndetectableBit)
      46     7507778 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, needs_access_check,
      47             :                kNeedsAccessCheckBit)
      48     3540348 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype,
      49             :                kReadOnlyPrototypeBit)
      50        9784 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, remove_prototype,
      51             :                kRemovePrototypeBit)
      52     7394224 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, do_not_cache, kDoNotCacheBit)
      53     7394240 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, accept_any_receiver,
      54             :                kAcceptAnyReceiver)
      55    49265377 : SMI_ACCESSORS(FunctionTemplateInfo, flag, kFlagOffset)
      56             : 
      57             : // static
      58      857932 : FunctionTemplateRareData FunctionTemplateInfo::EnsureFunctionTemplateRareData(
      59             :     Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) {
      60             :   HeapObject extra = function_template_info->rare_data();
      61      857932 :   if (extra->IsUndefined(isolate)) {
      62      577046 :     return AllocateFunctionTemplateRareData(isolate, function_template_info);
      63             :   } else {
      64             :     return FunctionTemplateRareData::cast(extra);
      65             :   }
      66             : }
      67             : 
      68             : #define RARE_ACCESSORS(Name, CamelName, Type)                                  \
      69             :   Type FunctionTemplateInfo::Get##CamelName() {                                \
      70             :     HeapObject extra = rare_data();                                            \
      71             :     HeapObject undefined = GetReadOnlyRoots().undefined_value();               \
      72             :     return extra == undefined ? undefined                                      \
      73             :                               : FunctionTemplateRareData::cast(extra)->Name(); \
      74             :   }                                                                            \
      75             :   inline void FunctionTemplateInfo::Set##CamelName(                            \
      76             :       Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info,   \
      77             :       Handle<Type> Name) {                                                     \
      78             :     FunctionTemplateRareData rare_data =                                       \
      79             :         EnsureFunctionTemplateRareData(isolate, function_template_info);       \
      80             :     rare_data->set_##Name(*Name);                                              \
      81             :   }
      82             : 
      83     4239140 : RARE_ACCESSORS(prototype_template, PrototypeTemplate, Object)
      84     7271618 : RARE_ACCESSORS(prototype_provider_template, PrototypeProviderTemplate, Object)
      85     7562804 : RARE_ACCESSORS(parent_template, ParentTemplate, Object)
      86     9272349 : RARE_ACCESSORS(named_property_handler, NamedPropertyHandler, Object)
      87     8335346 : RARE_ACCESSORS(indexed_property_handler, IndexedPropertyHandler, Object)
      88     5956517 : RARE_ACCESSORS(instance_template, InstanceTemplate, Object)
      89     3803988 : RARE_ACCESSORS(instance_call_handler, InstanceCallHandler, Object)
      90      230647 : RARE_ACCESSORS(access_check_info, AccessCheckInfo, Object)
      91             : #undef RARE_ACCESSORS
      92             : 
      93      992616 : ACCESSORS(FunctionTemplateRareData, prototype_template, Object,
      94             :           kPrototypeTemplateOffset)
      95      226321 : ACCESSORS(FunctionTemplateRareData, prototype_provider_template, Object,
      96             :           kPrototypeProviderTemplateOffset)
      97      513338 : ACCESSORS(FunctionTemplateRareData, parent_template, Object,
      98             :           kParentTemplateOffset)
      99     2394641 : ACCESSORS(FunctionTemplateRareData, named_property_handler, Object,
     100             :           kNamedPropertyHandlerOffset)
     101     1455019 : ACCESSORS(FunctionTemplateRareData, indexed_property_handler, Object,
     102             :           kIndexedPropertyHandlerOffset)
     103     4163489 : ACCESSORS(FunctionTemplateRareData, instance_template, Object,
     104             :           kInstanceTemplateOffset)
     105      282041 : ACCESSORS(FunctionTemplateRareData, instance_call_handler, Object,
     106             :           kInstanceCallHandlerOffset)
     107      400978 : ACCESSORS(FunctionTemplateRareData, access_check_info, Object,
     108             :           kAccessCheckInfoOffset)
     109             : 
     110     3058331 : ACCESSORS(ObjectTemplateInfo, constructor, Object, kConstructorOffset)
     111     6025388 : ACCESSORS(ObjectTemplateInfo, data, Object, kDataOffset)
     112             : 
     113             : CAST_ACCESSOR(TemplateInfo)
     114             : CAST_ACCESSOR(FunctionTemplateInfo)
     115             : CAST_ACCESSOR(FunctionTemplateRareData)
     116             : CAST_ACCESSOR(ObjectTemplateInfo)
     117             : 
     118     5412843 : bool FunctionTemplateInfo::instantiated() {
     119     5412843 :   return shared_function_info()->IsSharedFunctionInfo();
     120             : }
     121             : 
     122         702 : bool FunctionTemplateInfo::BreakAtEntry() {
     123             :   Object maybe_shared = shared_function_info();
     124         702 :   if (maybe_shared->IsSharedFunctionInfo()) {
     125         524 :     SharedFunctionInfo shared = SharedFunctionInfo::cast(maybe_shared);
     126         524 :     return shared->BreakAtEntry();
     127             :   }
     128             :   return false;
     129             : }
     130             : 
     131             : FunctionTemplateInfo FunctionTemplateInfo::GetParent(Isolate* isolate) {
     132             :   Object parent = GetParentTemplate();
     133             :   return parent->IsUndefined(isolate) ? FunctionTemplateInfo()
     134     3870661 :                                       : FunctionTemplateInfo::cast(parent);
     135             : }
     136             : 
     137      790989 : ObjectTemplateInfo ObjectTemplateInfo::GetParent(Isolate* isolate) {
     138             :   Object maybe_ctor = constructor();
     139      790989 :   if (maybe_ctor->IsUndefined(isolate)) return ObjectTemplateInfo();
     140             :   FunctionTemplateInfo constructor = FunctionTemplateInfo::cast(maybe_ctor);
     141             :   while (true) {
     142             :     constructor = constructor->GetParent(isolate);
     143      174852 :     if (constructor.is_null()) return ObjectTemplateInfo();
     144             :     Object maybe_obj = constructor->GetInstanceTemplate();
     145         353 :     if (!maybe_obj->IsUndefined(isolate)) {
     146             :       return ObjectTemplateInfo::cast(maybe_obj);
     147             :     }
     148             :   }
     149             :   return ObjectTemplateInfo();
     150             : }
     151             : 
     152             : int ObjectTemplateInfo::embedder_field_count() const {
     153             :   Object value = data();
     154             :   DCHECK(value->IsSmi());
     155      393110 :   return EmbedderFieldCount::decode(Smi::ToInt(value));
     156             : }
     157             : 
     158      109907 : void ObjectTemplateInfo::set_embedder_field_count(int count) {
     159             :   DCHECK_LE(count, JSObject::kMaxEmbedderFields);
     160             :   return set_data(
     161      329721 :       Smi::FromInt(EmbedderFieldCount::update(Smi::ToInt(data()), count)));
     162             : }
     163             : 
     164             : bool ObjectTemplateInfo::immutable_proto() const {
     165             :   Object value = data();
     166             :   DCHECK(value->IsSmi());
     167      739658 :   return IsImmutablePrototype::decode(Smi::ToInt(value));
     168             : }
     169             : 
     170          18 : void ObjectTemplateInfo::set_immutable_proto(bool immutable) {
     171          36 :   return set_data(Smi::FromInt(
     172          72 :       IsImmutablePrototype::update(Smi::ToInt(data()), immutable)));
     173             : }
     174             : 
     175        4167 : bool FunctionTemplateInfo::IsTemplateFor(JSObject object) {
     176        4167 :   return IsTemplateFor(object->map());
     177             : }
     178             : 
     179             : }  // namespace internal
     180             : }  // namespace v8
     181             : 
     182             : #include "src/objects/object-macros-undef.h"
     183             : 
     184             : #endif  // V8_OBJECTS_TEMPLATES_INL_H_

Generated by: LCOV version 1.10