Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 368 */ | 368 */ |
| 369 V8_INLINE(explicit Handle(T* val)) : val_(val) {} | 369 V8_INLINE(explicit Handle(T* val)) : val_(val) {} |
| 370 #endif | 370 #endif |
| 371 | 371 |
| 372 private: | 372 private: |
| 373 template<class F> | 373 template<class F> |
| 374 friend class Persistent; | 374 friend class Persistent; |
| 375 template<class F> | 375 template<class F> |
| 376 friend class Local; | 376 friend class Local; |
| 377 friend class Arguments; | 377 friend class Arguments; |
| 378 template<class F> | |
|
Sven Panne
2013/05/29 07:54:54
Similar code has been there before, but anyway: Mo
| |
| 379 friend class FunctionCallbackInfo; | |
| 380 template<class F> | |
| 381 friend class PropertyCallbackInfo; | |
| 378 friend class String; | 382 friend class String; |
| 379 friend class Object; | 383 friend class Object; |
| 380 friend class AccessorInfo; | 384 friend class AccessorInfo; |
| 381 friend Handle<Primitive> Undefined(Isolate* isolate); | 385 friend Handle<Primitive> Undefined(Isolate* isolate); |
| 382 friend Handle<Primitive> Null(Isolate* isolate); | 386 friend Handle<Primitive> Null(Isolate* isolate); |
| 383 friend Handle<Boolean> True(Isolate* isolate); | 387 friend Handle<Boolean> True(Isolate* isolate); |
| 384 friend Handle<Boolean> False(Isolate* isolate); | 388 friend Handle<Boolean> False(Isolate* isolate); |
| 385 friend class Context; | 389 friend class Context; |
| 386 friend class InternalHandleHelper; | 390 friend class InternalHandleHelper; |
| 387 friend class LocalContext; | 391 friend class LocalContext; |
| 392 friend class HandleScope; | |
| 388 | 393 |
| 389 #ifndef V8_USE_UNSAFE_HANDLES | 394 #ifndef V8_USE_UNSAFE_HANDLES |
| 390 V8_INLINE(static Handle<T> New(Isolate* isolate, T* that)); | 395 V8_INLINE(static Handle<T> New(Isolate* isolate, T* that)); |
| 391 #endif | 396 #endif |
| 392 | 397 |
| 393 T* val_; | 398 T* val_; |
| 394 }; | 399 }; |
| 395 | 400 |
| 396 | 401 |
| 397 /** | 402 /** |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 456 #endif | 461 #endif |
| 457 template <class S> V8_INLINE(Local(S* that) : Handle<T>(that)) { } | 462 template <class S> V8_INLINE(Local(S* that) : Handle<T>(that)) { } |
| 458 #endif | 463 #endif |
| 459 | 464 |
| 460 private: | 465 private: |
| 461 template<class F> | 466 template<class F> |
| 462 friend class Persistent; | 467 friend class Persistent; |
| 463 template<class F> | 468 template<class F> |
| 464 friend class Handle; | 469 friend class Handle; |
| 465 friend class Arguments; | 470 friend class Arguments; |
| 471 template<class F> | |
| 472 friend class FunctionCallbackInfo; | |
| 473 template<class F> | |
| 474 friend class PropertyCallbackInfo; | |
| 466 friend class String; | 475 friend class String; |
| 467 friend class Object; | 476 friend class Object; |
| 468 friend class AccessorInfo; | 477 friend class AccessorInfo; |
| 469 friend class Context; | 478 friend class Context; |
| 470 friend class InternalHandleHelper; | 479 friend class InternalHandleHelper; |
| 471 friend class LocalContext; | 480 friend class LocalContext; |
| 481 friend class HandleScope; | |
| 472 | 482 |
| 473 V8_INLINE(static Local<T> New(Isolate* isolate, T* that)); | 483 V8_INLINE(static Local<T> New(Isolate* isolate, T* that)); |
| 474 }; | 484 }; |
| 475 | 485 |
| 476 /** | 486 /** |
| 477 * An object reference that is independent of any handle scope. Where | 487 * An object reference that is independent of any handle scope. Where |
| 478 * a Local handle only lives as long as the HandleScope in which it was | 488 * a Local handle only lives as long as the HandleScope in which it was |
| 479 * allocated, a Persistent handle remains valid until it is explicitly | 489 * allocated, a Persistent handle remains valid until it is explicitly |
| 480 * disposed. | 490 * disposed. |
| 481 * | 491 * |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 720 * was previously assigned. | 730 * was previously assigned. |
| 721 */ | 731 */ |
| 722 // TODO(dcarney): remove before cutover | 732 // TODO(dcarney): remove before cutover |
| 723 V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const); | 733 V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const); |
| 724 | 734 |
| 725 /** | 735 /** |
| 726 * Disposes the current contents of the handle and replaces it. | 736 * Disposes the current contents of the handle and replaces it. |
| 727 */ | 737 */ |
| 728 V8_INLINE(void Reset(Isolate* isolate, const Handle<T>& other)); | 738 V8_INLINE(void Reset(Isolate* isolate, const Handle<T>& other)); |
| 729 | 739 |
| 740 #ifndef V8_USE_UNSAFE_HANDLES | |
| 741 V8_INLINE(void Reset(Isolate* isolate, const Persistent<T>& other)); | |
| 742 #endif | |
| 743 | |
| 730 /** | 744 /** |
| 731 * Returns the underlying raw pointer and clears the handle. The caller is | 745 * Returns the underlying raw pointer and clears the handle. The caller is |
| 732 * responsible of eventually destroying the underlying object (by creating a | 746 * responsible of eventually destroying the underlying object (by creating a |
| 733 * Persistent handle which points to it and Disposing it). In the future, | 747 * Persistent handle which points to it and Disposing it). In the future, |
| 734 * destructing a Persistent will also Dispose it. With this function, the | 748 * destructing a Persistent will also Dispose it. With this function, the |
| 735 * embedder can let the Persistent go out of scope without it getting | 749 * embedder can let the Persistent go out of scope without it getting |
| 736 * disposed. | 750 * disposed. |
| 737 */ | 751 */ |
| 738 V8_INLINE(T* ClearAndLeak()); | 752 V8_INLINE(T* ClearAndLeak()); |
| 739 | 753 |
| (...skipping 4911 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5651 this->val_ = NULL; | 5665 this->val_ = NULL; |
| 5652 return; | 5666 return; |
| 5653 } | 5667 } |
| 5654 internal::Object** p = reinterpret_cast<internal::Object**>(other.val_); | 5668 internal::Object** p = reinterpret_cast<internal::Object**>(other.val_); |
| 5655 this->val_ = reinterpret_cast<T*>( | 5669 this->val_ = reinterpret_cast<T*>( |
| 5656 V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), p)); | 5670 V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), p)); |
| 5657 #endif | 5671 #endif |
| 5658 } | 5672 } |
| 5659 | 5673 |
| 5660 | 5674 |
| 5675 #ifndef V8_USE_UNSAFE_HANDLES | |
| 5676 template <class T> | |
| 5677 void Persistent<T>::Reset(Isolate* isolate, const Persistent<T>& other) { | |
| 5678 Dispose(isolate); | |
| 5679 if (other.IsEmpty()) { | |
| 5680 this->val_ = NULL; | |
| 5681 return; | |
| 5682 } | |
| 5683 internal::Object** p = reinterpret_cast<internal::Object**>(other.val_); | |
| 5684 this->val_ = reinterpret_cast<T*>( | |
| 5685 V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), p)); | |
| 5686 } | |
| 5687 #endif | |
| 5688 | |
| 5689 | |
| 5661 template <class T> | 5690 template <class T> |
| 5662 T* Persistent<T>::ClearAndLeak() { | 5691 T* Persistent<T>::ClearAndLeak() { |
| 5663 T* old; | 5692 T* old; |
| 5664 #ifdef V8_USE_UNSAFE_HANDLES | 5693 #ifdef V8_USE_UNSAFE_HANDLES |
| 5665 old = **this; | 5694 old = **this; |
| 5666 *this = Persistent<T>(); | 5695 *this = Persistent<T>(); |
| 5667 #else | 5696 #else |
| 5668 old = val_; | 5697 old = val_; |
| 5669 val_ = NULL; | 5698 val_ = NULL; |
| 5670 #endif | 5699 #endif |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6343 | 6372 |
| 6344 | 6373 |
| 6345 } // namespace v8 | 6374 } // namespace v8 |
| 6346 | 6375 |
| 6347 | 6376 |
| 6348 #undef V8EXPORT | 6377 #undef V8EXPORT |
| 6349 #undef TYPE_CHECK | 6378 #undef TYPE_CHECK |
| 6350 | 6379 |
| 6351 | 6380 |
| 6352 #endif // V8_H_ | 6381 #endif // V8_H_ |
| OLD | NEW |