allocation-site-scopes.h 1.96 KB
Newer Older
1
// Copyright 2013 the V8 project authors. All rights reserved.
2 3
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
4 5 6 7

#ifndef V8_ALLOCATION_SITE_SCOPES_H_
#define V8_ALLOCATION_SITE_SCOPES_H_

8 9
#include "src/handles.h"
#include "src/objects.h"
10
#include "src/objects/allocation-site.h"
11
#include "src/objects/map.h"
12 13 14 15 16 17 18 19

namespace v8 {
namespace internal {

// AllocationSiteContext is the base class for walking and copying a nested
// boilerplate with AllocationSite and AllocationMemento support.
class AllocationSiteContext {
 public:
20
  explicit AllocationSiteContext(Isolate* isolate) {
21
    isolate_ = isolate;
22
  }
23 24 25 26

  Handle<AllocationSite> top() { return top_; }
  Handle<AllocationSite> current() { return current_; }

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
    *(current_.location()) = site->ptr();
34 35
  }

36
  inline void InitializeTraversal(Handle<AllocationSite> site);
37 38 39 40 41 42 43 44 45 46 47 48 49 50

 private:
  Isolate* isolate_;
  Handle<AllocationSite> top_;
  Handle<AllocationSite> current_;
};


// AllocationSiteUsageContext aids in the creation of AllocationMementos placed
// behind some/all components of a copied object literal.
class AllocationSiteUsageContext : public AllocationSiteContext {
 public:
  AllocationSiteUsageContext(Isolate* isolate, Handle<AllocationSite> site,
                             bool activated)
51 52 53
      : AllocationSiteContext(isolate),
        top_site_(site),
        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 65
 private:
  Handle<AllocationSite> top_site_;
66
  bool activated_;
67 68 69
};


70 71
}  // namespace internal
}  // namespace v8
72 73

#endif  // V8_ALLOCATION_SITE_SCOPES_H_