| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 32c5dff78c5744969f116a22e780675d429f8dc9..c7d3ff7f1bfbef600176c806619a1e946fa703fb 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -7587,6 +7587,26 @@ static Object* Runtime_SetNewFunctionAttributes(Arguments args) {
|
| }
|
|
|
|
|
| +static Object* Runtime_AllocateInNewSpace(Arguments args) {
|
| + // Allocate a block of memory in NewSpace (filled with a filler).
|
| + // Use as fallback for allocation in generated code when NewSpace
|
| + // is full.
|
| + ASSERT(args.length() == 1);
|
| + CONVERT_ARG_CHECKED(Smi, size_smi, 0);
|
| + int size = size_smi->value();
|
| + RUNTIME_ASSERT(IsAligned(size, kPointerSize));
|
| + RUNTIME_ASSERT(size > 0);
|
| + static const int kMinFreeNewSpaceAfterGC =
|
| + Heap::InitialSemiSpaceSize() * 3/4;
|
| + RUNTIME_ASSERT(size <= kMinFreeNewSpaceAfterGC);
|
| + Object* allocation = Heap::new_space()->AllocateRaw(size);
|
| + if (!allocation->IsFailure()) {
|
| + Heap::CreateFillerObjectAt(HeapObject::cast(allocation)->address(), size);
|
| + }
|
| + return allocation;
|
| +}
|
| +
|
| +
|
| // Push an array unto an array of arrays if it is not already in the
|
| // array. Returns true if the element was pushed on the stack and
|
| // false otherwise.
|
|
|