LCOV - code coverage report
Current view: top level - src - allocation-site-scopes.h (source / functions) Hit Total Coverage
Test: app.info Lines: 3 3 100.0 %
Date: 2019-04-19 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2013 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_ALLOCATION_SITE_SCOPES_H_
       6             : #define V8_ALLOCATION_SITE_SCOPES_H_
       7             : 
       8             : #include "src/handles.h"
       9             : #include "src/objects.h"
      10             : #include "src/objects/allocation-site.h"
      11             : #include "src/objects/map.h"
      12             : 
      13             : namespace v8 {
      14             : namespace internal {
      15             : 
      16             : // AllocationSiteContext is the base class for walking and copying a nested
      17             : // boilerplate with AllocationSite and AllocationMemento support.
      18             : class AllocationSiteContext {
      19             :  public:
      20             :   explicit AllocationSiteContext(Isolate* isolate) {
      21      819398 :     isolate_ = isolate;
      22             :   }
      23             : 
      24             :   Handle<AllocationSite> top() { return top_; }
      25             :   Handle<AllocationSite> current() { return current_; }
      26             : 
      27             :   bool ShouldCreateMemento(Handle<JSObject> object) { return false; }
      28             : 
      29             :   Isolate* isolate() { return isolate_; }
      30             : 
      31             :  protected:
      32             :   void update_current_site(AllocationSite site) {
      33      634116 :     *(current_.location()) = site->ptr();
      34             :   }
      35             : 
      36             :   inline void InitializeTraversal(Handle<AllocationSite> site);
      37             : 
      38             :  private:
      39             :   Isolate* isolate_;
      40             :   Handle<AllocationSite> top_;
      41             :   Handle<AllocationSite> current_;
      42             : };
      43             : 
      44             : 
      45             : // AllocationSiteUsageContext aids in the creation of AllocationMementos placed
      46             : // behind some/all components of a copied object literal.
      47             : class AllocationSiteUsageContext : public AllocationSiteContext {
      48             :  public:
      49             :   AllocationSiteUsageContext(Isolate* isolate, Handle<AllocationSite> site,
      50             :                              bool activated)
      51             :       : AllocationSiteContext(isolate),
      52             :         top_site_(site),
      53      723023 :         activated_(activated) { }
      54             : 
      55             :   inline Handle<AllocationSite> EnterNewScope();
      56             : 
      57             :   inline void ExitScope(Handle<AllocationSite> scope_site,
      58             :                         Handle<JSObject> object);
      59             : 
      60             :   inline bool ShouldCreateMemento(Handle<JSObject> object);
      61             : 
      62             :   static const bool kCopying = true;
      63             : 
      64             :  private:
      65             :   Handle<AllocationSite> top_site_;
      66             :   bool activated_;
      67             : };
      68             : 
      69             : 
      70             : }  // namespace internal
      71             : }  // namespace v8
      72             : 
      73             : #endif  // V8_ALLOCATION_SITE_SCOPES_H_

Generated by: LCOV version 1.10