Index: src/allocation.h |
=================================================================== |
--- src/allocation.h (revision 3427) |
+++ src/allocation.h (working copy) |
@@ -28,42 +28,11 @@ |
#ifndef V8_ALLOCATION_H_ |
#define V8_ALLOCATION_H_ |
+#include "v8-global-context.h" |
+ |
namespace v8 { |
namespace internal { |
- |
-// A class that controls whether allocation is allowed. This is for |
-// the C++ heap only! |
-class NativeAllocationChecker { |
- public: |
- typedef enum { ALLOW, DISALLOW } NativeAllocationAllowed; |
- explicit inline NativeAllocationChecker(NativeAllocationAllowed allowed) |
- : allowed_(allowed) { |
-#ifdef DEBUG |
- if (allowed == DISALLOW) { |
- allocation_disallowed_++; |
- } |
-#endif |
- } |
- ~NativeAllocationChecker() { |
-#ifdef DEBUG |
- if (allowed_ == DISALLOW) { |
- allocation_disallowed_--; |
- } |
-#endif |
- ASSERT(allocation_disallowed_ >= 0); |
- } |
- static inline bool allocation_allowed() { |
- return allocation_disallowed_ == 0; |
- } |
- private: |
- // This static counter ensures that NativeAllocationCheckers can be nested. |
- static int allocation_disallowed_; |
- // This flag applies to this particular instance. |
- NativeAllocationAllowed allowed_; |
-}; |
- |
- |
// Superclass for classes managed with new & delete. |
class Malloced { |
public: |
@@ -135,7 +104,6 @@ |
INLINE(static void Delete(void* p)) { Malloced::Delete(p); } |
}; |
- |
// Allocation policy for allocating in preallocated space. |
// Used as an allocation policy for ScopeInfo when generating |
// stack traces. |
@@ -153,17 +121,66 @@ |
size_t size_; |
PreallocatedStorage* previous_; |
PreallocatedStorage* next_; |
- static bool preallocated_; |
- static PreallocatedStorage in_use_list_; |
- static PreallocatedStorage free_list_; |
- |
void LinkTo(PreallocatedStorage* other); |
void Unlink(); |
DISALLOW_IMPLICIT_CONSTRUCTORS(PreallocatedStorage); |
}; |
+class StorageData { |
+ private: |
+ // This static counter ensures that NativeAllocationCheckers can be nested. |
+ int allocation_disallowed_; |
+ bool preallocated_; |
+ PreallocatedStorage in_use_list_; |
+ PreallocatedStorage free_list_; |
+ #ifdef DEBUG |
+ private: |
+ bool rset_used_; // state of the remembered set |
+ #endif |
+ |
+ StorageData(); |
+ friend class V8Context; |
+ friend class PreallocatedStorage; |
+ friend class NativeAllocationChecker; |
+ friend class Page; |
+ DISALLOW_COPY_AND_ASSIGN(StorageData); |
+}; |
+ |
+// A class that controls whether allocation is allowed. This is for |
+// the C++ heap only! |
+class NativeAllocationChecker { |
+ public: |
+ typedef enum { ALLOW, DISALLOW } NativeAllocationAllowed; |
+ explicit inline NativeAllocationChecker(NativeAllocationAllowed allowed) |
+ : allowed_(allowed) { |
+#ifdef DEBUG |
+ if (allowed == DISALLOW) { |
+ v8_context()->storage_data_.allocation_disallowed_++; |
+ } |
+#endif |
+ } |
+ ~NativeAllocationChecker() { |
+#ifdef DEBUG |
+ if (allowed_ == DISALLOW) { |
+ v8_context()->storage_data_.allocation_disallowed_--; |
+ } |
+#endif |
+ ASSERT(v8_context()->storage_data_.allocation_disallowed_ >= 0); |
+ } |
+ static inline bool allocation_allowed() { |
+ V8Context * const v8context = v8_context(); |
+ return v8context ? |
+ v8context->storage_data_.allocation_disallowed_ == 0: true; |
+ } |
+ private: |
+ // This static counter ensures that NativeAllocationCheckers can be nested. |
+ static int allocation_disallowed_; |
+ // This flag applies to this particular instance. |
+ NativeAllocationAllowed allowed_; |
+}; |
+ |
} } // namespace v8::internal |
#endif // V8_ALLOCATION_H_ |