1 // Copyright 2012 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_ZONE_INL_H_
6 #define V8_ZONE_INL_H_
7 
8 #include "src/zone.h"
9 
10 #ifdef V8_USE_ADDRESS_SANITIZER
11   #include <sanitizer/asan_interface.h>
12 #else
13   #define ASAN_UNPOISON_MEMORY_REGION(start, size) ((void) 0)
14 #endif
15 
16 #include "src/counters.h"
17 #include "src/isolate.h"
18 #include "src/utils.h"
19 
20 namespace v8 {
21 namespace internal {
22 
23 
24 static const int kASanRedzoneBytes = 24;  // Must be a multiple of 8.
25 
26 
excess_allocation()27 bool Zone::excess_allocation() {
28   return segment_bytes_allocated_ > kExcessLimit;
29 }
30 
31 
adjust_segment_bytes_allocated(int delta)32 void Zone::adjust_segment_bytes_allocated(int delta) {
33   segment_bytes_allocated_ += delta;
34   isolate_->counters()->zone_segment_bytes()->Set(segment_bytes_allocated_);
35 }
36 
37 
38 template <typename Config>
~ZoneSplayTree()39 ZoneSplayTree<Config>::~ZoneSplayTree() {
40   // Reset the root to avoid unneeded iteration over all tree nodes
41   // in the destructor.  For a zone-allocated tree, nodes will be
42   // freed by the Zone.
43   SplayTree<Config, ZoneAllocationPolicy>::ResetRoot();
44 }
45 
46 
new(size_t size,Zone * zone)47 void* ZoneObject::operator new(size_t size, Zone* zone) {
48   return zone->New(static_cast<int>(size));
49 }
50 
New(size_t size)51 inline void* ZoneAllocationPolicy::New(size_t size) {
52   DCHECK(zone_);
53   return zone_->New(static_cast<int>(size));
54 }
55 
56 
57 template <typename T>
new(size_t size,Zone * zone)58 void* ZoneList<T>::operator new(size_t size, Zone* zone) {
59   return zone->New(static_cast<int>(size));
60 }
61 
62 
63 template <typename T>
new(size_t size,Zone * zone)64 void* ZoneSplayTree<T>::operator new(size_t size, Zone* zone) {
65   return zone->New(static_cast<int>(size));
66 }
67 
68 
69 } }  // namespace v8::internal
70 
71 #endif  // V8_ZONE_INL_H_
72