diff --git a/src/factory.h b/src/factory.h index d7761b9927..2b4ae7b038 100644 --- a/src/factory.h +++ b/src/factory.h @@ -588,101 +588,6 @@ Handle Factory::NewNumberFromSize(size_t value, } -// Used to "safely" transition from pointer-based runtime code to Handle-based -// runtime code. When a GC happens during the called Handle-based code, a -// failure object is returned to the pointer-based code to cause it abort and -// re-trigger a gc of it's own. Since this double-gc will cause the Handle-based -// code to be called twice, it must be idempotent. -class IdempotentPointerToHandleCodeTrampoline { - public: - explicit IdempotentPointerToHandleCodeTrampoline(Isolate* isolate) - : isolate_(isolate) {} - - template - MUST_USE_RESULT MaybeObject* Call(R (*function)()) { - int collections = isolate_->heap()->gc_count(); - (*function)(); - return (collections == isolate_->heap()->gc_count()) - ? isolate_->heap()->true_value() - : reinterpret_cast(Failure::RetryAfterGC()); - } - - template - MUST_USE_RESULT MaybeObject* CallWithReturnValue(R (*function)()) { - int collections = isolate_->heap()->gc_count(); - Object* result = (*function)(); - return (collections == isolate_->heap()->gc_count()) - ? result - : reinterpret_cast(Failure::RetryAfterGC()); - } - - template - MUST_USE_RESULT MaybeObject* Call(R (*function)(P1), P1 p1) { - int collections = isolate_->heap()->gc_count(); - (*function)(p1); - return (collections == isolate_->heap()->gc_count()) - ? isolate_->heap()->true_value() - : reinterpret_cast(Failure::RetryAfterGC()); - } - - template - MUST_USE_RESULT MaybeObject* CallWithReturnValue( - R (*function)(P1), - P1 p1) { - int collections = isolate_->heap()->gc_count(); - Object* result = (*function)(p1); - return (collections == isolate_->heap()->gc_count()) - ? result - : reinterpret_cast(Failure::RetryAfterGC()); - } - - template - MUST_USE_RESULT MaybeObject* Call( - R (*function)(P1, P2), - P1 p1, - P2 p2) { - int collections = isolate_->heap()->gc_count(); - (*function)(p1, p2); - return (collections == isolate_->heap()->gc_count()) - ? isolate_->heap()->true_value() - : reinterpret_cast(Failure::RetryAfterGC()); - } - - template - MUST_USE_RESULT MaybeObject* CallWithReturnValue( - R (*function)(P1, P2), - P1 p1, - P2 p2) { - int collections = isolate_->heap()->gc_count(); - Object* result = (*function)(p1, p2); - return (collections == isolate_->heap()->gc_count()) - ? result - : reinterpret_cast(Failure::RetryAfterGC()); - } - - template - MUST_USE_RESULT MaybeObject* CallWithReturnValue( - R (*function)(P1, P2, P3, P4, P5, P6, P7), - P1 p1, - P2 p2, - P3 p3, - P4 p4, - P5 p5, - P6 p6, - P7 p7) { - int collections = isolate_->heap()->gc_count(); - Handle result = (*function)(p1, p2, p3, p4, p5, p6, p7); - return (collections == isolate_->heap()->gc_count()) - ? *result - : reinterpret_cast(Failure::RetryAfterGC()); - } - - private: - Isolate* isolate_; -}; - - } } // namespace v8::internal #endif // V8_FACTORY_H_