[presubmit] Enable readability/namespace linter checking.
[platform/upstream/v8.git] / src / compilation-dependencies.h
1 // Copyright 2015 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_DEPENDENCIES_H_
6 #define V8_DEPENDENCIES_H_
7
8 #include "src/handles.h"
9 #include "src/objects.h"
10
11 namespace v8 {
12 namespace internal {
13
14 // Collects dependencies for this compilation, e.g. assumptions about
15 // stable maps, constant globals, etc.
16 class CompilationDependencies {
17  public:
18   CompilationDependencies(Isolate* isolate, Zone* zone)
19       : isolate_(isolate),
20         zone_(zone),
21         object_wrapper_(Handle<Foreign>::null()),
22         aborted_(false) {
23     std::fill_n(groups_, DependentCode::kGroupCount, nullptr);
24   }
25
26   void Insert(DependentCode::DependencyGroup group, Handle<HeapObject> handle);
27
28   void AssumeInitialMapCantChange(Handle<Map> map) {
29     Insert(DependentCode::kInitialMapChangedGroup, map);
30   }
31   void AssumeFieldType(Handle<Map> map) {
32     Insert(DependentCode::kFieldTypeGroup, map);
33   }
34   void AssumePropertyCell(Handle<PropertyCell> cell) {
35     Insert(DependentCode::kPropertyCellChangedGroup, cell);
36   }
37   void AssumeTenuringDecision(Handle<AllocationSite> site) {
38     Insert(DependentCode::kAllocationSiteTenuringChangedGroup, site);
39   }
40   void AssumeTransitionStable(Handle<AllocationSite> site);
41
42   void Commit(Handle<Code> code);
43   void Rollback();
44   void Abort() { aborted_ = true; }
45   bool HasAborted() const { return aborted_; }
46
47   bool IsEmpty() const {
48     for (int i = 0; i < DependentCode::kGroupCount; i++) {
49       if (groups_[i]) return false;
50     }
51     return true;
52   }
53
54  private:
55   Isolate* isolate_;
56   Zone* zone_;
57   Handle<Foreign> object_wrapper_;
58   bool aborted_;
59   ZoneList<Handle<HeapObject> >* groups_[DependentCode::kGroupCount];
60
61   DependentCode* Get(Handle<Object> object);
62   void Set(Handle<Object> object, Handle<DependentCode> dep);
63 };
64 }  // namespace internal
65 }  // namespace v8
66
67 #endif  // V8_DEPENDENCIES_H_