| Index: include/v8.h
|
| ===================================================================
|
| --- include/v8.h (revision 1129)
|
| +++ include/v8.h (working copy)
|
| @@ -396,19 +396,11 @@
|
| */
|
| class EXPORT HandleScope {
|
| public:
|
| - HandleScope() : previous_(current_), is_closed_(false) {
|
| - current_.extensions = 0;
|
| - }
|
| + HandleScope();
|
|
|
| - ~HandleScope() {
|
| - // TODO(1245391): In a perfect world, there would be a way of not
|
| - // having to check for explicitly closed scopes maybe through
|
| - // subclassing HandleScope?
|
| - if (!is_closed_) RestorePreviousState();
|
| - }
|
| + ~HandleScope();
|
|
|
| /**
|
| - * TODO(1245391): Consider introducing a subclass for this.
|
| * Closes the handle scope and returns the value as a handle in the
|
| * previous scope, which is the new current scope after the call.
|
| */
|
| @@ -432,6 +424,8 @@
|
| void* operator new(size_t size);
|
| void operator delete(void*, size_t);
|
|
|
| + // This Data class is accessible internally through a typedef in the
|
| + // ImplementationUtilities class.
|
| class EXPORT Data {
|
| public:
|
| int extensions;
|
| @@ -443,31 +437,13 @@
|
| }
|
| };
|
|
|
| - static Data current_;
|
| - const Data previous_;
|
| + Data previous_;
|
|
|
| - /**
|
| - * Re-establishes the previous scope state. Should be called only
|
| - * once, and only for the current scope.
|
| - */
|
| - void RestorePreviousState() {
|
| - if (current_.extensions > 0) DeleteExtensions();
|
| - current_ = previous_;
|
| -#ifdef DEBUG
|
| - ZapRange(current_.next, current_.limit);
|
| -#endif
|
| - }
|
| -
|
| - // TODO(1245391): Consider creating a subclass for this.
|
| + // Allow for the active closing of HandleScopes which allows to pass a handle
|
| + // from the HandleScope being closed to the next top most HandleScope.
|
| bool is_closed_;
|
| void** RawClose(void** value);
|
|
|
| - /** Deallocates any extensions used by the current scope.*/
|
| - static void DeleteExtensions();
|
| -
|
| - // Zaps the handles in the half-open interval [start, end).
|
| - static void ZapRange(void** start, void** end);
|
| -
|
| friend class ImplementationUtilities;
|
| };
|
|
|
| @@ -2284,10 +2260,17 @@
|
| */
|
| static bool IsLocked();
|
|
|
| + /**
|
| + * Returns whether v8::Locker is being used by this V8 instance.
|
| + */
|
| + static bool IsActive() { return active_; }
|
| +
|
| private:
|
| bool has_lock_;
|
| bool top_level_;
|
|
|
| + static bool active_;
|
| +
|
| // Disallow copying and assigning.
|
| Locker(const Locker&);
|
| void operator=(const Locker&);
|
|
|