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-17 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    22715878 : ACCESSORS(TemplateInfo, tag, Object, kTagOffset)
      28    29092620 : ACCESSORS(TemplateInfo, serial_number, Object, kSerialNumberOffset)
      29    10053179 : SMI_ACCESSORS(TemplateInfo, number_of_properties, kNumberOfPropertiesOffset)
      30    17250563 : ACCESSORS(TemplateInfo, property_list, Object, kPropertyListOffset)
      31     4814473 : ACCESSORS(TemplateInfo, property_accessors, Object, kPropertyAccessorsOffset)
      32             : 
      33    20699129 : ACCESSORS(FunctionTemplateInfo, call_code, Object, kCallCodeOffset)
      34      395391 : ACCESSORS(FunctionTemplateInfo, class_name, Object, kClassNameOffset)
      35     3268305 : ACCESSORS(FunctionTemplateInfo, signature, Object, kSignatureOffset)
      36    27704894 : ACCESSORS(FunctionTemplateInfo, shared_function_info, Object,
      37             :           kSharedFunctionInfoOffset)
      38    41099528 : ACCESSORS(FunctionTemplateInfo, rare_data, HeapObject,
      39             :           kFunctionTemplateRareDataOffset)
      40    18593804 : ACCESSORS(FunctionTemplateInfo, cached_property_name, Object,
      41             :           kCachedPropertyNameOffset)
      42     7393197 : SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset)
      43           0 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
      44             :                kHiddenPrototypeBit)
      45     7393622 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, undetectable, kUndetectableBit)
      46     7506876 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, needs_access_check,
      47             :                kNeedsAccessCheckBit)
      48     3539762 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype,
      49             :                kReadOnlyPrototypeBit)
      50        9784 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, remove_prototype,
      51             :                kRemovePrototypeBit)
      52     7393322 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, do_not_cache, kDoNotCacheBit)
      53     7393340 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, accept_any_receiver,
      54             :                kAcceptAnyReceiver)
      55    49269007 : SMI_ACCESSORS(FunctionTemplateInfo, flag, kFlagOffset)
      56             : 
      57             : // static
      58      857840 : FunctionTemplateRareData FunctionTemplateInfo::EnsureFunctionTemplateRareData(
      59             :     Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) {
      60             :   HeapObject extra = function_template_info->rare_data();
      61      857840 :   if (extra->IsUndefined(isolate)) {
      62      576974 :     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     4238653 : RARE_ACCESSORS(prototype_template, PrototypeTemplate, Object)
      84     7270743 : RARE_ACCESSORS(prototype_provider_template, PrototypeProviderTemplate, Object)
      85     7561898 : RARE_ACCESSORS(parent_template, ParentTemplate, Object)
      86     9281387 : RARE_ACCESSORS(named_property_handler, NamedPropertyHandler, Object)
      87     8334436 : RARE_ACCESSORS(indexed_property_handler, IndexedPropertyHandler, Object)
      88     5962452 : RARE_ACCESSORS(instance_template, InstanceTemplate, Object)
      89     3803534 : RARE_ACCESSORS(instance_call_handler, InstanceCallHandler, Object)
      90      230631 : RARE_ACCESSORS(access_check_info, AccessCheckInfo, Object)
      91             : #undef RARE_ACCESSORS
      92             : 
      93      992544 : ACCESSORS(FunctionTemplateRareData, prototype_template, Object,
      94             :           kPrototypeTemplateOffset)
      95      226305 : ACCESSORS(FunctionTemplateRareData, prototype_provider_template, Object,
      96             :           kPrototypeProviderTemplateOffset)
      97      513302 : ACCESSORS(FunctionTemplateRareData, parent_template, Object,
      98             :           kParentTemplateOffset)
      99     2404533 : ACCESSORS(FunctionTemplateRareData, named_property_handler, Object,
     100             :           kNamedPropertyHandlerOffset)
     101     1454963 : ACCESSORS(FunctionTemplateRareData, indexed_property_handler, Object,
     102             :           kIndexedPropertyHandlerOffset)
     103     4169638 : ACCESSORS(FunctionTemplateRareData, instance_template, Object,
     104             :           kInstanceTemplateOffset)
     105      282021 : ACCESSORS(FunctionTemplateRareData, instance_call_handler, Object,
     106             :           kInstanceCallHandlerOffset)
     107      400950 : ACCESSORS(FunctionTemplateRareData, access_check_info, Object,
     108             :           kAccessCheckInfoOffset)
     109             : 
     110     3068037 : ACCESSORS(ObjectTemplateInfo, constructor, Object, kConstructorOffset)
     111     6028104 : ACCESSORS(ObjectTemplateInfo, data, Object, kDataOffset)
     112             : 
     113             : CAST_ACCESSOR(TemplateInfo)
     114             : CAST_ACCESSOR(FunctionTemplateInfo)
     115             : CAST_ACCESSOR(FunctionTemplateRareData)
     116             : CAST_ACCESSOR(ObjectTemplateInfo)
     117             : 
     118     5412097 : bool FunctionTemplateInfo::instantiated() {
     119     5412098 :   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     3870199 :                                       : FunctionTemplateInfo::cast(parent);
     135             : }
     136             : 
     137      794242 : ObjectTemplateInfo ObjectTemplateInfo::GetParent(Isolate* isolate) {
     138             :   Object maybe_ctor = constructor();
     139      794242 :   if (maybe_ctor->IsUndefined(isolate)) return ObjectTemplateInfo();
     140             :   FunctionTemplateInfo constructor = FunctionTemplateInfo::cast(maybe_ctor);
     141             :   while (true) {
     142             :     constructor = constructor->GetParent(isolate);
     143      174840 :     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      393082 :   return EmbedderFieldCount::decode(Smi::ToInt(value));
     156             : }
     157             : 
     158      109899 : void ObjectTemplateInfo::set_embedder_field_count(int count) {
     159             :   DCHECK_LE(count, JSObject::kMaxEmbedderFields);
     160             :   return set_data(
     161      329697 :       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      742914 :   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