| Index: runtime/vm/object.cc
|
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
|
| index 3314c72efe8a016b79b7350f1873ae1c91e2eb9d..0f5014f104e4d270598c63ab9317c5c1513cff89 100644
|
| --- a/runtime/vm/object.cc
|
| +++ b/runtime/vm/object.cc
|
| @@ -1687,7 +1687,8 @@ RawObject* Object::Allocate(intptr_t cls_id,
|
| intptr_t size,
|
| Heap::Space space) {
|
| ASSERT(Utils::IsAligned(size, kObjectAlignment));
|
| - Isolate* isolate = Isolate::Current();
|
| + Thread* thread = Thread::Current();
|
| + Isolate* isolate = thread->isolate();
|
| ASSERT(isolate->no_callback_scope_depth() == 0);
|
| Heap* heap = isolate->heap();
|
|
|
| @@ -1697,7 +1698,7 @@ RawObject* Object::Allocate(intptr_t cls_id,
|
| // into dart code or allocating any code.
|
| const Instance& exception =
|
| Instance::Handle(isolate->object_store()->out_of_memory());
|
| - Exceptions::Throw(isolate, exception);
|
| + Exceptions::Throw(thread, exception);
|
| UNREACHABLE();
|
| }
|
| if (space == Heap::kNew) {
|
| @@ -17300,11 +17301,7 @@ const char* Bigint::ToDecCString(uword (*allocator)(intptr_t size)) const {
|
| const intptr_t kMaxUsed =
|
| kIntptrMax / kBitsPerDigit / kLog2Dividend * kLog2Divisor;
|
| if (used > kMaxUsed) {
|
| - // Throw out of memory exception.
|
| - Isolate* isolate = Isolate::Current();
|
| - const Instance& exception =
|
| - Instance::Handle(isolate->object_store()->out_of_memory());
|
| - Exceptions::Throw(isolate, exception);
|
| + Exceptions::ThrowOOM();
|
| UNREACHABLE();
|
| }
|
| const int64_t bit_len = used * kBitsPerDigit;
|
| @@ -17382,11 +17379,7 @@ const char* Bigint::ToHexCString(uword (*allocator)(intptr_t size)) const {
|
| const int kHexDigitsPerDigit = 8;
|
| const intptr_t kMaxUsed = (kIntptrMax - 4) / kHexDigitsPerDigit;
|
| if (used > kMaxUsed) {
|
| - // Throw out of memory exception.
|
| - Isolate* isolate = Isolate::Current();
|
| - const Instance& exception =
|
| - Instance::Handle(isolate->object_store()->out_of_memory());
|
| - Exceptions::Throw(isolate, exception);
|
| + Exceptions::ThrowOOM();
|
| UNREACHABLE();
|
| }
|
| intptr_t hex_len = (used - 1) * kHexDigitsPerDigit;
|
| @@ -18159,10 +18152,7 @@ RawString* String::ConcatAllRange(const Array& strings,
|
| str ^= strings.At(i);
|
| const intptr_t str_len = str.Length();
|
| if ((kMaxElements - result_len) < str_len) {
|
| - Isolate* isolate = Isolate::Current();
|
| - const Instance& exception =
|
| - Instance::Handle(isolate->object_store()->out_of_memory());
|
| - Exceptions::Throw(isolate, exception);
|
| + Exceptions::ThrowOOM();
|
| UNREACHABLE();
|
| }
|
| result_len += str_len;
|
| @@ -19426,12 +19416,7 @@ void GrowableObjectArray::Add(const Object& value, Heap::Space space) const {
|
| // TODO(Issue 2500): Need a better growth strategy.
|
| intptr_t new_capacity = (Capacity() == 0) ? 4 : Capacity() * 2;
|
| if (new_capacity <= Capacity()) {
|
| - // Use the preallocated out of memory exception to avoid calling
|
| - // into dart code or allocating any code.
|
| - Isolate* isolate = Isolate::Current();
|
| - const Instance& exception =
|
| - Instance::Handle(isolate->object_store()->out_of_memory());
|
| - Exceptions::Throw(isolate, exception);
|
| + Exceptions::ThrowOOM();
|
| UNREACHABLE();
|
| }
|
| Grow(new_capacity, space);
|
|
|