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_
|