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-02-19 Functions: 62 63 98.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_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    24187922 : OBJECT_CONSTRUCTORS_IMPL(FunctionTemplateInfo, TemplateInfo)
      22     4203070 : OBJECT_CONSTRUCTORS_IMPL(ObjectTemplateInfo, TemplateInfo)
      23    13586956 : OBJECT_CONSTRUCTORS_IMPL(FunctionTemplateRareData, Struct)
      24             : 
      25             : NEVER_READ_ONLY_SPACE_IMPL(TemplateInfo)
      26             : 
      27    21710045 : ACCESSORS(TemplateInfo, tag, Object, kTagOffset)
      28    27853264 : ACCESSORS(TemplateInfo, serial_number, Object, kSerialNumberOffset)
      29    16718437 : SMI_ACCESSORS(TemplateInfo, number_of_properties, kNumberOfProperties)
      30    16177411 : ACCESSORS(TemplateInfo, property_list, Object, kPropertyListOffset)
      31     4611405 : ACCESSORS(TemplateInfo, property_accessors, Object, kPropertyAccessorsOffset)
      32             : 
      33    19578562 : ACCESSORS(FunctionTemplateInfo, call_code, Object, kCallCodeOffset)
      34      387624 : ACCESSORS(FunctionTemplateInfo, class_name, Object, kClassNameOffset)
      35     3036778 : ACCESSORS(FunctionTemplateInfo, signature, Object, kSignatureOffset)
      36    26482406 : ACCESSORS(FunctionTemplateInfo, shared_function_info, Object,
      37             :           kSharedFunctionInfoOffset)
      38   133708078 : ACCESSORS(FunctionTemplateInfo, rare_data, HeapObject,
      39             :           kFunctionTemplateRareDataOffset)
      40    17668808 : ACCESSORS(FunctionTemplateInfo, cached_property_name, Object,
      41             :           kCachedPropertyNameOffset)
      42    10540224 : SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset)
      43     7706822 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
      44             :                kHiddenPrototypeBit)
      45    14262800 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, undetectable, kUndetectableBit)
      46    21508160 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, needs_access_check,
      47             :                kNeedsAccessCheckBit)
      48    10693800 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype,
      49             :                kReadOnlyPrototypeBit)
      50    21305046 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, remove_prototype,
      51             :                kRemovePrototypeBit)
      52     7026992 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, do_not_cache, kDoNotCacheBit)
      53    11522634 : BOOL_ACCESSORS(FunctionTemplateInfo, flag, accept_any_receiver,
      54             :                kAcceptAnyReceiver)
      55   113383715 : SMI_ACCESSORS(FunctionTemplateInfo, flag, kFlagOffset)
      56             : 
      57             : // static
      58      839552 : FunctionTemplateRareData FunctionTemplateInfo::EnsureFunctionTemplateRareData(
      59             :     Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) {
      60      839552 :   HeapObject extra = function_template_info->rare_data();
      61      839552 :   if (extra->IsUndefined(isolate)) {
      62      564226 :     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    15533785 : RARE_ACCESSORS(prototype_template, PrototypeTemplate, Object)
      84    27627608 : RARE_ACCESSORS(prototype_provider_template, PrototypeProviderTemplate, Object)
      85    28768382 : RARE_ACCESSORS(parent_template, ParentTemplate, Object)
      86    34974871 : RARE_ACCESSORS(named_property_handler, NamedPropertyHandler, Object)
      87    31330322 : RARE_ACCESSORS(indexed_property_handler, IndexedPropertyHandler, Object)
      88    19559044 : RARE_ACCESSORS(instance_template, InstanceTemplate, Object)
      89    14472178 : RARE_ACCESSORS(instance_call_handler, InstanceCallHandler, Object)
      90      570790 : RARE_ACCESSORS(access_check_info, AccessCheckInfo, Object)
      91             : #undef RARE_ACCESSORS
      92             : 
      93      973099 : ACCESSORS(FunctionTemplateRareData, prototype_template, Object,
      94             :           kPrototypeTemplateOffset)
      95      221791 : ACCESSORS(FunctionTemplateRareData, prototype_provider_template, Object,
      96             :           kPrototypeProviderTemplateOffset)
      97      503229 : ACCESSORS(FunctionTemplateRareData, parent_template, Object,
      98             :           kParentTemplateOffset)
      99     2307217 : ACCESSORS(FunctionTemplateRareData, named_property_handler, Object,
     100             :           kNamedPropertyHandlerOffset)
     101     1392151 : ACCESSORS(FunctionTemplateRareData, indexed_property_handler, Object,
     102             :           kIndexedPropertyHandlerOffset)
     103     4084533 : ACCESSORS(FunctionTemplateRareData, instance_template, Object,
     104             :           kInstanceTemplateOffset)
     105      276476 : ACCESSORS(FunctionTemplateRareData, instance_call_handler, Object,
     106             :           kInstanceCallHandlerOffset)
     107      393190 : ACCESSORS(FunctionTemplateRareData, access_check_info, Object,
     108             :           kAccessCheckInfoOffset)
     109             : 
     110     3013006 : ACCESSORS(ObjectTemplateInfo, constructor, Object, kConstructorOffset)
     111     6179545 : ACCESSORS(ObjectTemplateInfo, data, Object, kDataOffset)
     112             : 
     113             : CAST_ACCESSOR(TemplateInfo)
     114    12093965 : CAST_ACCESSOR(FunctionTemplateInfo)
     115     6793478 : CAST_ACCESSOR(FunctionTemplateRareData)
     116     2101534 : CAST_ACCESSOR(ObjectTemplateInfo)
     117             : 
     118     5189512 : bool FunctionTemplateInfo::instantiated() {
     119    10379025 :   return shared_function_info()->IsSharedFunctionInfo();
     120             : }
     121             : 
     122      101999 : bool FunctionTemplateInfo::BreakAtEntry() {
     123      101999 :   Object maybe_shared = shared_function_info();
     124      101999 :   if (maybe_shared->IsSharedFunctionInfo()) {
     125        1762 :     SharedFunctionInfo shared = SharedFunctionInfo::cast(maybe_shared);
     126        1762 :     return shared->BreakAtEntry();
     127             :   }
     128             :   return false;
     129             : }
     130             : 
     131     3683735 : FunctionTemplateInfo FunctionTemplateInfo::GetParent(Isolate* isolate) {
     132     3683735 :   Object parent = GetParentTemplate();
     133             :   return parent->IsUndefined(isolate) ? FunctionTemplateInfo()
     134     3684416 :                                       : FunctionTemplateInfo::cast(parent);
     135             : }
     136             : 
     137      780469 : ObjectTemplateInfo ObjectTemplateInfo::GetParent(Isolate* isolate) {
     138      780469 :   Object maybe_ctor = constructor();
     139      780472 :   if (maybe_ctor->IsUndefined(isolate)) return ObjectTemplateInfo();
     140      171222 :   FunctionTemplateInfo constructor = FunctionTemplateInfo::cast(maybe_ctor);
     141             :   while (true) {
     142      171425 :     constructor = constructor->GetParent(isolate);
     143      171425 :     if (constructor.is_null()) return ObjectTemplateInfo();
     144         353 :     Object maybe_obj = constructor->GetInstanceTemplate();
     145         353 :     if (!maybe_obj->IsUndefined(isolate)) {
     146             :       return ObjectTemplateInfo::cast(maybe_obj);
     147             :     }
     148             :   }
     149         203 :   return ObjectTemplateInfo();
     150             : }
     151             : 
     152      385321 : int ObjectTemplateInfo::embedder_field_count() const {
     153      385321 :   Object value = data();
     154             :   DCHECK(value->IsSmi());
     155      770642 :   return EmbedderFieldCount::decode(Smi::ToInt(value));
     156             : }
     157             : 
     158      107755 : void ObjectTemplateInfo::set_embedder_field_count(int count) {
     159             :   DCHECK_LE(count, JSObject::kMaxEmbedderFields);
     160             :   return set_data(
     161      323265 :       Smi::FromInt(EmbedderFieldCount::update(Smi::ToInt(data()), count)));
     162             : }
     163             : 
     164     1005021 : bool ObjectTemplateInfo::immutable_proto() const {
     165     1005021 :   Object value = data();
     166             :   DCHECK(value->IsSmi());
     167     2010042 :   return IsImmutablePrototype::decode(Smi::ToInt(value));
     168             : }
     169             : 
     170          18 : void ObjectTemplateInfo::set_immutable_proto(bool immutable) {
     171             :   return set_data(Smi::FromInt(
     172          54 :       IsImmutablePrototype::update(Smi::ToInt(data()), immutable)));
     173             : }
     174             : 
     175        4088 : bool FunctionTemplateInfo::IsTemplateFor(JSObject object) {
     176        4088 :   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