LCOV - code coverage report
Current view: top level - src/objects - templates-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 79 79 100.0 %
Date: 2019-01-20 Functions: 81 81 100.0 %

          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-inl.h"
      11             : #include "src/objects/shared-function-info-inl.h"
      12             : 
      13             : // Has to be the last include (doesn't have include guards):
      14             : #include "src/objects/object-macros.h"
      15             : 
      16             : namespace v8 {
      17             : namespace internal {
      18             : 
      19             : OBJECT_CONSTRUCTORS_IMPL(TemplateInfo, Struct)
      20    24647248 : OBJECT_CONSTRUCTORS_IMPL(FunctionTemplateInfo, TemplateInfo)
      21     4344608 : OBJECT_CONSTRUCTORS_IMPL(ObjectTemplateInfo, TemplateInfo)
      22    13746428 : OBJECT_CONSTRUCTORS_IMPL(FunctionTemplateRareData, Struct)
      23             : 
      24             : NEVER_READ_ONLY_SPACE_IMPL(TemplateInfo)
      25             : 
      26    23045304 : ACCESSORS(TemplateInfo, tag, Object, kTagOffset)
      27    40032350 : ACCESSORS(TemplateInfo, serial_number, Object, kSerialNumberOffset)
      28    16778790 : SMI_ACCESSORS(TemplateInfo, number_of_properties, kNumberOfProperties)
      29    29102059 : ACCESSORS(TemplateInfo, property_list, Object, kPropertyListOffset)
      30    14024015 : ACCESSORS(TemplateInfo, property_accessors, Object, kPropertyAccessorsOffset)
      31             : 
      32    25693233 : ACCESSORS(FunctionTemplateInfo, call_code, Object, kCallCodeOffset)
      33      628441 : ACCESSORS(FunctionTemplateInfo, class_name, Object, kClassNameOffset)
      34     7245251 : ACCESSORS(FunctionTemplateInfo, signature, Object, kSignatureOffset)
      35    47456222 : ACCESSORS(FunctionTemplateInfo, shared_function_info, Object,
      36             :           kSharedFunctionInfoOffset)
      37   141420993 : ACCESSORS(FunctionTemplateInfo, rare_data, HeapObject,
      38             :           kFunctionTemplateRareDataOffset)
      39    18988498 : ACCESSORS(FunctionTemplateInfo, cached_property_name, Object,
      40             :           kCachedPropertyNameOffset)
      41    11187005 : SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset)
      42     8128317 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
      43             :                kHiddenPrototypeBit)
      44    15121514 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, undetectable, kUndetectableBit)
      45    22794463 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, needs_access_check,
      46             :                kNeedsAccessCheckBit)
      47    11610788 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype,
      48             :                kReadOnlyPrototypeBit)
      49    22595021 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, remove_prototype,
      50             :                kRemovePrototypeBit)
      51     7458184 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, do_not_cache, kDoNotCacheBit)
      52    11764624 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, accept_any_receiver,
      53             :                kAcceptAnyReceiver)
      54   120152498 : SMI_ACCESSORS(FunctionTemplateInfo, flag, kFlagOffset)
      55             : 
      56             : // static
      57      891165 : FunctionTemplateRareData FunctionTemplateInfo::EnsureFunctionTemplateRareData(
      58             :     Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) {
      59      891165 :   HeapObject extra = function_template_info->rare_data();
      60      891166 :   if (extra->IsUndefined(isolate)) {
      61      620120 :     return AllocateFunctionTemplateRareData(isolate, function_template_info);
      62             :   } else {
      63             :     return FunctionTemplateRareData::cast(extra);
      64             :   }
      65             : }
      66             : 
      67             : #define RARE_ACCESSORS(Name, CamelName, Type)                                  \
      68             :   Type FunctionTemplateInfo::Get##CamelName() {                                \
      69             :     HeapObject extra = rare_data();                                            \
      70             :     HeapObject undefined = GetReadOnlyRoots().undefined_value();               \
      71             :     return extra == undefined ? undefined                                      \
      72             :                               : FunctionTemplateRareData::cast(extra)->Name(); \
      73             :   }                                                                            \
      74             :   inline void FunctionTemplateInfo::Set##CamelName(                            \
      75             :       Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info,   \
      76             :       Handle<Type> Name) {                                                     \
      77             :     FunctionTemplateRareData rare_data =                                       \
      78             :         EnsureFunctionTemplateRareData(isolate, function_template_info);       \
      79             :     rare_data->set_##Name(*Name);                                              \
      80             :   }
      81             : 
      82    12759159 : RARE_ACCESSORS(prototype_template, PrototypeTemplate, Object)
      83    22237364 : RARE_ACCESSORS(prototype_provider_template, PrototypeProviderTemplate, Object)
      84    23356763 : RARE_ACCESSORS(parent_template, ParentTemplate, Object)
      85    29592106 : RARE_ACCESSORS(named_property_handler, NamedPropertyHandler, Object)
      86    25916138 : RARE_ACCESSORS(indexed_property_handler, IndexedPropertyHandler, Object)
      87    17221399 : RARE_ACCESSORS(instance_template, InstanceTemplate, Object)
      88    11766718 : RARE_ACCESSORS(instance_call_handler, InstanceCallHandler, Object)
      89      561938 : RARE_ACCESSORS(access_check_info, AccessCheckInfo, Object)
      90             : #undef RARE_ACCESSORS
      91             : 
      92     1813002 : ACCESSORS(FunctionTemplateRareData, prototype_template, Object,
      93             :           kPrototypeTemplateOffset)
      94      655147 : ACCESSORS(FunctionTemplateRareData, prototype_provider_template, Object,
      95             :           kPrototypeProviderTemplateOffset)
      96     1484662 : ACCESSORS(FunctionTemplateRareData, parent_template, Object,
      97             :           kParentTemplateOffset)
      98     6354851 : ACCESSORS(FunctionTemplateRareData, named_property_handler, Object,
      99             :           kNamedPropertyHandlerOffset)
     100     3594615 : ACCESSORS(FunctionTemplateRareData, indexed_property_handler, Object,
     101             :           kIndexedPropertyHandlerOffset)
     102     7071899 : ACCESSORS(FunctionTemplateRareData, instance_template, Object,
     103             :           kInstanceTemplateOffset)
     104      814560 : ACCESSORS(FunctionTemplateRareData, instance_call_handler, Object,
     105             :           kInstanceCallHandlerOffset)
     106      613222 : ACCESSORS(FunctionTemplateRareData, access_check_info, Object,
     107             :           kAccessCheckInfoOffset)
     108             : 
     109     7631326 : ACCESSORS(ObjectTemplateInfo, constructor, Object, kConstructorOffset)
     110     9471726 : ACCESSORS(ObjectTemplateInfo, data, Object, kDataOffset)
     111             : 
     112             : CAST_ACCESSOR(TemplateInfo)
     113    12323626 : CAST_ACCESSOR(FunctionTemplateInfo)
     114     6873214 : CAST_ACCESSOR(FunctionTemplateRareData)
     115     2172301 : CAST_ACCESSOR(ObjectTemplateInfo)
     116             : 
     117     5650892 : bool FunctionTemplateInfo::instantiated() {
     118    11301791 :   return shared_function_info()->IsSharedFunctionInfo();
     119             : }
     120             : 
     121      115006 : bool FunctionTemplateInfo::BreakAtEntry() {
     122      115006 :   Object maybe_shared = shared_function_info();
     123      115006 :   if (maybe_shared->IsSharedFunctionInfo()) {
     124        1762 :     SharedFunctionInfo shared = SharedFunctionInfo::cast(maybe_shared);
     125        1762 :     return shared->BreakAtEntry();
     126             :   }
     127             :   return false;
     128             : }
     129             : 
     130     3896843 : FunctionTemplateInfo FunctionTemplateInfo::GetParent(Isolate* isolate) {
     131     3896843 :   Object parent = GetParentTemplate();
     132             :   return parent->IsUndefined(isolate) ? FunctionTemplateInfo()
     133     3897543 :                                       : FunctionTemplateInfo::cast(parent);
     134             : }
     135             : 
     136      807571 : ObjectTemplateInfo ObjectTemplateInfo::GetParent(Isolate* isolate) {
     137      807571 :   Object maybe_ctor = constructor();
     138      807585 :   if (maybe_ctor->IsUndefined(isolate)) return ObjectTemplateInfo();
     139      168761 :   FunctionTemplateInfo constructor = FunctionTemplateInfo::cast(maybe_ctor);
     140             :   while (true) {
     141      168964 :     constructor = constructor->GetParent(isolate);
     142      168964 :     if (constructor.is_null()) return ObjectTemplateInfo();
     143         365 :     Object maybe_obj = constructor->GetInstanceTemplate();
     144         365 :     if (!maybe_obj->IsUndefined(isolate)) {
     145             :       return ObjectTemplateInfo::cast(maybe_obj);
     146             :     }
     147             :   }
     148         203 :   return ObjectTemplateInfo();
     149             : }
     150             : 
     151      379230 : int ObjectTemplateInfo::embedder_field_count() const {
     152      379230 :   Object value = data();
     153             :   DCHECK(value->IsSmi());
     154      758460 :   return EmbedderFieldCount::decode(Smi::ToInt(value));
     155             : }
     156             : 
     157      105934 : void ObjectTemplateInfo::set_embedder_field_count(int count) {
     158             :   DCHECK_LE(count, JSObject::kMaxEmbedderFields);
     159             :   return set_data(
     160      317802 :       Smi::FromInt(EmbedderFieldCount::update(Smi::ToInt(data()), count)));
     161             : }
     162             : 
     163     1028857 : bool ObjectTemplateInfo::immutable_proto() const {
     164     1028857 :   Object value = data();
     165             :   DCHECK(value->IsSmi());
     166     2057735 :   return IsImmutablePrototype::decode(Smi::ToInt(value));
     167             : }
     168             : 
     169          18 : void ObjectTemplateInfo::set_immutable_proto(bool immutable) {
     170             :   return set_data(Smi::FromInt(
     171          54 :       IsImmutablePrototype::update(Smi::ToInt(data()), immutable)));
     172             : }
     173             : 
     174       16504 : bool FunctionTemplateInfo::IsTemplateFor(JSObject object) {
     175       16504 :   return IsTemplateFor(object->map());
     176             : }
     177             : 
     178             : }  // namespace internal
     179             : }  // namespace v8
     180             : 
     181             : #include "src/objects/object-macros-undef.h"
     182             : 
     183             : #endif  // V8_OBJECTS_TEMPLATES_INL_H_

Generated by: LCOV version 1.10