| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_HANDLES_H_ | 5 #ifndef V8_HANDLES_H_ |
| 6 #define V8_HANDLES_H_ | 6 #define V8_HANDLES_H_ |
| 7 | 7 |
| 8 #include "include/v8.h" | 8 #include "include/v8.h" |
| 9 #include "src/base/functional.h" | 9 #include "src/base/functional.h" |
| 10 #include "src/base/macros.h" | 10 #include "src/base/macros.h" |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 // garbage collector will no longer track the object stored in the | 259 // garbage collector will no longer track the object stored in the |
| 260 // handle and may deallocate it. The behavior of accessing a handle | 260 // handle and may deallocate it. The behavior of accessing a handle |
| 261 // for which the handle scope has been deleted is undefined. | 261 // for which the handle scope has been deleted is undefined. |
| 262 class HandleScope { | 262 class HandleScope { |
| 263 public: | 263 public: |
| 264 explicit inline HandleScope(Isolate* isolate); | 264 explicit inline HandleScope(Isolate* isolate); |
| 265 | 265 |
| 266 inline ~HandleScope(); | 266 inline ~HandleScope(); |
| 267 | 267 |
| 268 // Counts the number of allocated handles. | 268 // Counts the number of allocated handles. |
| 269 static int NumberOfHandles(Isolate* isolate); | 269 V8_EXPORT_PRIVATE static int NumberOfHandles(Isolate* isolate); |
| 270 | 270 |
| 271 // Create a new handle or lookup a canonical handle. | 271 // Create a new handle or lookup a canonical handle. |
| 272 V8_INLINE static Object** GetHandle(Isolate* isolate, Object* value); | 272 V8_INLINE static Object** GetHandle(Isolate* isolate, Object* value); |
| 273 | 273 |
| 274 // Creates a new handle with the given value. | 274 // Creates a new handle with the given value. |
| 275 V8_INLINE static Object** CreateHandle(Isolate* isolate, Object* value); | 275 V8_INLINE static Object** CreateHandle(Isolate* isolate, Object* value); |
| 276 | 276 |
| 277 // Deallocates any extensions used by the current scope. | 277 // Deallocates any extensions used by the current scope. |
| 278 static void DeleteExtensions(Isolate* isolate); | 278 V8_EXPORT_PRIVATE static void DeleteExtensions(Isolate* isolate); |
| 279 | 279 |
| 280 static Address current_next_address(Isolate* isolate); | 280 static Address current_next_address(Isolate* isolate); |
| 281 static Address current_limit_address(Isolate* isolate); | 281 static Address current_limit_address(Isolate* isolate); |
| 282 static Address current_level_address(Isolate* isolate); | 282 static Address current_level_address(Isolate* isolate); |
| 283 | 283 |
| 284 // Closes the HandleScope (invalidating all handles | 284 // Closes the HandleScope (invalidating all handles |
| 285 // created in the scope of the HandleScope) and returns | 285 // created in the scope of the HandleScope) and returns |
| 286 // a Handle backed by the parent scope holding the | 286 // a Handle backed by the parent scope holding the |
| 287 // value of the argument handle. | 287 // value of the argument handle. |
| 288 template <typename T> | 288 template <typename T> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 303 Isolate* isolate_; | 303 Isolate* isolate_; |
| 304 Object** prev_next_; | 304 Object** prev_next_; |
| 305 Object** prev_limit_; | 305 Object** prev_limit_; |
| 306 | 306 |
| 307 // Close the handle scope resetting limits to a previous state. | 307 // Close the handle scope resetting limits to a previous state. |
| 308 static inline void CloseScope(Isolate* isolate, | 308 static inline void CloseScope(Isolate* isolate, |
| 309 Object** prev_next, | 309 Object** prev_next, |
| 310 Object** prev_limit); | 310 Object** prev_limit); |
| 311 | 311 |
| 312 // Extend the handle scope making room for more handles. | 312 // Extend the handle scope making room for more handles. |
| 313 static Object** Extend(Isolate* isolate); | 313 V8_EXPORT_PRIVATE static Object** Extend(Isolate* isolate); |
| 314 | 314 |
| 315 #ifdef ENABLE_HANDLE_ZAPPING | 315 #ifdef ENABLE_HANDLE_ZAPPING |
| 316 // Zaps the handles in the half-open interval [start, end). | 316 // Zaps the handles in the half-open interval [start, end). |
| 317 static void ZapRange(Object** start, Object** end); | 317 V8_EXPORT_PRIVATE static void ZapRange(Object** start, Object** end); |
| 318 #endif | 318 #endif |
| 319 | 319 |
| 320 friend class v8::HandleScope; | 320 friend class v8::HandleScope; |
| 321 friend class DeferredHandles; | 321 friend class DeferredHandles; |
| 322 friend class DeferredHandleScope; | 322 friend class DeferredHandleScope; |
| 323 friend class HandleScopeImplementer; | 323 friend class HandleScopeImplementer; |
| 324 friend class Isolate; | 324 friend class Isolate; |
| 325 | 325 |
| 326 DISALLOW_COPY_AND_ASSIGN(HandleScope); | 326 DISALLOW_COPY_AND_ASSIGN(HandleScope); |
| 327 }; | 327 }; |
| 328 | 328 |
| 329 | 329 |
| 330 // Forward declarations for CanonicalHandleScope. | 330 // Forward declarations for CanonicalHandleScope. |
| 331 template <typename V> | 331 template <typename V> |
| 332 class IdentityMap; | 332 class IdentityMap; |
| 333 class RootIndexMap; | 333 class RootIndexMap; |
| 334 | 334 |
| 335 | 335 |
| 336 // A CanonicalHandleScope does not open a new HandleScope. It changes the | 336 // A CanonicalHandleScope does not open a new HandleScope. It changes the |
| 337 // existing HandleScope so that Handles created within are canonicalized. | 337 // existing HandleScope so that Handles created within are canonicalized. |
| 338 // This does not apply to nested inner HandleScopes unless a nested | 338 // This does not apply to nested inner HandleScopes unless a nested |
| 339 // CanonicalHandleScope is introduced. Handles are only canonicalized within | 339 // CanonicalHandleScope is introduced. Handles are only canonicalized within |
| 340 // the same CanonicalHandleScope, but not across nested ones. | 340 // the same CanonicalHandleScope, but not across nested ones. |
| 341 class CanonicalHandleScope final { | 341 class CanonicalHandleScope final { |
| 342 public: | 342 public: |
| 343 explicit CanonicalHandleScope(Isolate* isolate); | 343 explicit CanonicalHandleScope(Isolate* isolate); |
| 344 ~CanonicalHandleScope(); | 344 ~CanonicalHandleScope(); |
| 345 | 345 |
| 346 private: | 346 private: |
| 347 Object** Lookup(Object* object); | 347 V8_EXPORT_PRIVATE Object** Lookup(Object* object); |
| 348 | 348 |
| 349 Isolate* isolate_; | 349 Isolate* isolate_; |
| 350 Zone zone_; | 350 Zone zone_; |
| 351 RootIndexMap* root_index_map_; | 351 RootIndexMap* root_index_map_; |
| 352 IdentityMap<Object**>* identity_map_; | 352 IdentityMap<Object**>* identity_map_; |
| 353 // Ordinary nested handle scopes within the current one are not canonical. | 353 // Ordinary nested handle scopes within the current one are not canonical. |
| 354 int canonical_level_; | 354 int canonical_level_; |
| 355 // We may have nested canonical scopes. Handles are canonical within each one. | 355 // We may have nested canonical scopes. Handles are canonical within each one. |
| 356 CanonicalHandleScope* prev_canonical_scope_; | 356 CanonicalHandleScope* prev_canonical_scope_; |
| 357 | 357 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 next = limit = NULL; | 411 next = limit = NULL; |
| 412 sealed_level = level = 0; | 412 sealed_level = level = 0; |
| 413 canonical_scope = NULL; | 413 canonical_scope = NULL; |
| 414 } | 414 } |
| 415 }; | 415 }; |
| 416 | 416 |
| 417 } // namespace internal | 417 } // namespace internal |
| 418 } // namespace v8 | 418 } // namespace v8 |
| 419 | 419 |
| 420 #endif // V8_HANDLES_H_ | 420 #endif // V8_HANDLES_H_ |
| OLD | NEW |