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 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 | 669 |
670 V8_INLINE(uint16_t WrapperClassId() const); | 670 V8_INLINE(uint16_t WrapperClassId() const); |
671 | 671 |
672 /** | 672 /** |
673 * Returns the class ID previously assigned to this handle or 0 if no class ID | 673 * Returns the class ID previously assigned to this handle or 0 if no class ID |
674 * was previously assigned. | 674 * was previously assigned. |
675 */ | 675 */ |
676 // TODO(dcarney): remove before cutover | 676 // TODO(dcarney): remove before cutover |
677 V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const); | 677 V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const); |
678 | 678 |
| 679 /** |
| 680 * Disposes the current contents of the handle and replaces it. |
| 681 */ |
| 682 V8_INLINE(void Reset(Isolate* isolate, const Handle<T>& other)); |
| 683 |
679 #ifndef V8_USE_UNSAFE_HANDLES | 684 #ifndef V8_USE_UNSAFE_HANDLES |
680 | 685 |
681 #ifndef V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT | 686 #ifndef V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT |
682 | 687 |
683 private: | 688 private: |
684 #endif | 689 #endif |
685 // TODO(dcarney): make unlinkable before cutover | 690 // TODO(dcarney): make unlinkable before cutover |
686 V8_INLINE(Persistent(const Persistent& that)) : val_(that.val_) {} | 691 V8_INLINE(Persistent(const Persistent& that)) : val_(that.val_) {} |
687 // TODO(dcarney): make unlinkable before cutover | 692 // TODO(dcarney): make unlinkable before cutover |
688 V8_INLINE(Persistent& operator=(const Persistent& that)) { // NOLINT | 693 V8_INLINE(Persistent& operator=(const Persistent& that)) { // NOLINT |
(...skipping 4653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5342 true, | 5347 true, |
5343 I::kNodeIsPartiallyDependentShift); | 5348 I::kNodeIsPartiallyDependentShift); |
5344 } | 5349 } |
5345 | 5350 |
5346 template <class T> | 5351 template <class T> |
5347 void Persistent<T>::SetWrapperClassId(uint16_t class_id) { | 5352 void Persistent<T>::SetWrapperClassId(uint16_t class_id) { |
5348 SetWrapperClassId(Isolate::GetCurrent(), class_id); | 5353 SetWrapperClassId(Isolate::GetCurrent(), class_id); |
5349 } | 5354 } |
5350 | 5355 |
5351 template <class T> | 5356 template <class T> |
| 5357 void Persistent<T>::Reset(Isolate* isolate, const Handle<T>& other) { |
| 5358 Dispose(isolate); |
| 5359 #ifdef V8_USE_UNSAFE_HANDLES |
| 5360 *this = *New(isolate, other); |
| 5361 #else |
| 5362 if (other.IsEmpty()) { |
| 5363 this->val_ = NULL; |
| 5364 return; |
| 5365 } |
| 5366 internal::Object** p = reinterpret_cast<internal::Object**>(other.val_); |
| 5367 this->val_ = reinterpret_cast<T*>( |
| 5368 V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), p)); |
| 5369 #endif |
| 5370 } |
| 5371 |
| 5372 template <class T> |
5352 void Persistent<T>::SetWrapperClassId(Isolate* isolate, uint16_t class_id) { | 5373 void Persistent<T>::SetWrapperClassId(Isolate* isolate, uint16_t class_id) { |
5353 typedef internal::Internals I; | 5374 typedef internal::Internals I; |
5354 if (this->IsEmpty()) return; | 5375 if (this->IsEmpty()) return; |
5355 if (!I::IsInitialized(isolate)) return; | 5376 if (!I::IsInitialized(isolate)) return; |
5356 internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_); | 5377 internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_); |
5357 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; | 5378 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; |
5358 *reinterpret_cast<uint16_t*>(addr) = class_id; | 5379 *reinterpret_cast<uint16_t*>(addr) = class_id; |
5359 } | 5380 } |
5360 | 5381 |
5361 template <class T> | 5382 template <class T> |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5912 | 5933 |
5913 | 5934 |
5914 } // namespace v8 | 5935 } // namespace v8 |
5915 | 5936 |
5916 | 5937 |
5917 #undef V8EXPORT | 5938 #undef V8EXPORT |
5918 #undef TYPE_CHECK | 5939 #undef TYPE_CHECK |
5919 | 5940 |
5920 | 5941 |
5921 #endif // V8_H_ | 5942 #endif // V8_H_ |
OLD | NEW |