| Index: src/allocation.cc
|
| ===================================================================
|
| --- src/allocation.cc (revision 7267)
|
| +++ src/allocation.cc (working copy)
|
| @@ -25,17 +25,56 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -#include <stdlib.h>
|
| +#include "v8.h"
|
| +#include "isolate.h"
|
| +#include "allocation.h"
|
|
|
| +/* TODO(isolates): this is what's included in bleeding_edge
|
| + including of v8.h was replaced with these in
|
| + http://codereview.chromium.org/5005001/
|
| + we need Isolate and Isolate needs a lot more so I'm including v8.h back.
|
| #include "../include/v8stdint.h"
|
| #include "globals.h"
|
| #include "checks.h"
|
| #include "allocation.h"
|
| #include "utils.h"
|
| +*/
|
|
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +#ifdef DEBUG
|
| +
|
| +NativeAllocationChecker::NativeAllocationChecker(
|
| + NativeAllocationChecker::NativeAllocationAllowed allowed)
|
| + : allowed_(allowed) {
|
| + if (allowed == DISALLOW) {
|
| + Isolate* isolate = Isolate::Current();
|
| + isolate->set_allocation_disallowed(isolate->allocation_disallowed() + 1);
|
| + }
|
| +}
|
| +
|
| +
|
| +NativeAllocationChecker::~NativeAllocationChecker() {
|
| + Isolate* isolate = Isolate::Current();
|
| + if (allowed_ == DISALLOW) {
|
| + isolate->set_allocation_disallowed(isolate->allocation_disallowed() - 1);
|
| + }
|
| + ASSERT(isolate->allocation_disallowed() >= 0);
|
| +}
|
| +
|
| +
|
| +bool NativeAllocationChecker::allocation_allowed() {
|
| + // TODO(isolates): either find a way to make this work that doesn't
|
| + // require initializing an isolate before we can use malloc or drop
|
| + // it completely.
|
| + return true;
|
| + // return Isolate::Current()->allocation_disallowed() == 0;
|
| +}
|
| +
|
| +#endif // DEBUG
|
| +
|
| +
|
| void* Malloced::New(size_t size) {
|
| ASSERT(NativeAllocationChecker::allocation_allowed());
|
| void* result = malloc(size);
|
| @@ -103,15 +142,7 @@
|
| }
|
|
|
|
|
| -int NativeAllocationChecker::allocation_disallowed_ = 0;
|
| -
|
| -
|
| -PreallocatedStorage PreallocatedStorage::in_use_list_(0);
|
| -PreallocatedStorage PreallocatedStorage::free_list_(0);
|
| -bool PreallocatedStorage::preallocated_ = false;
|
| -
|
| -
|
| -void PreallocatedStorage::Init(size_t size) {
|
| +void Isolate::PreallocatedStorageInit(size_t size) {
|
| ASSERT(free_list_.next_ == &free_list_);
|
| ASSERT(free_list_.previous_ == &free_list_);
|
| PreallocatedStorage* free_chunk =
|
| @@ -119,12 +150,12 @@
|
| free_list_.next_ = free_list_.previous_ = free_chunk;
|
| free_chunk->next_ = free_chunk->previous_ = &free_list_;
|
| free_chunk->size_ = size - sizeof(PreallocatedStorage);
|
| - preallocated_ = true;
|
| + preallocated_storage_preallocated_ = true;
|
| }
|
|
|
|
|
| -void* PreallocatedStorage::New(size_t size) {
|
| - if (!preallocated_) {
|
| +void* Isolate::PreallocatedStorageNew(size_t size) {
|
| + if (!preallocated_storage_preallocated_) {
|
| return FreeStoreAllocationPolicy::New(size);
|
| }
|
| ASSERT(free_list_.next_ != &free_list_);
|
| @@ -166,11 +197,11 @@
|
|
|
|
|
| // We don't attempt to coalesce.
|
| -void PreallocatedStorage::Delete(void* p) {
|
| +void Isolate::PreallocatedStorageDelete(void* p) {
|
| if (p == NULL) {
|
| return;
|
| }
|
| - if (!preallocated_) {
|
| + if (!preallocated_storage_preallocated_) {
|
| FreeStoreAllocationPolicy::Delete(p);
|
| return;
|
| }
|
|
|