Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: include/v8.h

Issue 687003005: Introduce phantom weak handles in the API and use them internally for debug info (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/api.cc » ('j') | src/global-handles.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 /** \mainpage V8 API Reference Guide 5 /** \mainpage V8 API Reference Guide
6 * 6 *
7 * V8 is Google's open source JavaScript engine. 7 * V8 is Google's open source JavaScript engine.
8 * 8 *
9 * This set of documents provides reference material generated from the 9 * This set of documents provides reference material generated from the
10 * V8 header file, include/v8.h. 10 * V8 header file, include/v8.h.
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 template<typename P> 509 template<typename P>
510 V8_INLINE void SetWeak( 510 V8_INLINE void SetWeak(
511 P* parameter, 511 P* parameter,
512 typename WeakCallbackData<T, P>::Callback callback); 512 typename WeakCallbackData<T, P>::Callback callback);
513 513
514 template<typename S, typename P> 514 template<typename S, typename P>
515 V8_INLINE void SetWeak( 515 V8_INLINE void SetWeak(
516 P* parameter, 516 P* parameter,
517 typename WeakCallbackData<S, P>::Callback callback); 517 typename WeakCallbackData<S, P>::Callback callback);
518 518
519 // Phantom persistents work like weak persistents, except that the pointer to
520 // the object being collected is not available in the finalization callback.
521 // This enables the garbage collector to collect the object and any objects
522 // it references transitively in one GC cycle.
523 template <typename P>
524 V8_INLINE void SetPhantom(P* parameter,
525 typename WeakCallbackData<T, P>::Callback callback);
526
527 template <typename S, typename P>
528 V8_INLINE void SetPhantom(P* parameter,
529 typename WeakCallbackData<S, P>::Callback callback);
530
519 template<typename P> 531 template<typename P>
520 V8_INLINE P* ClearWeak(); 532 V8_INLINE P* ClearWeak();
521 533
522 // TODO(dcarney): remove this. 534 // TODO(dcarney): remove this.
523 V8_INLINE void ClearWeak() { ClearWeak<void>(); } 535 V8_INLINE void ClearWeak() { ClearWeak<void>(); }
524 536
525 /** 537 /**
526 * Marks the reference to this object independent. Garbage collector is free 538 * Marks the reference to this object independent. Garbage collector is free
527 * to ignore any object groups containing this object. Weak callback for an 539 * to ignore any object groups containing this object. Weak callback for an
528 * independent handle should not assume that it will be preceded by a global 540 * independent handle should not assume that it will be preceded by a global
(...skipping 4941 matching lines...) Expand 10 before | Expand all | Expand 10 after
5470 5482
5471 /** 5483 /**
5472 * Clears all references to the v8::Platform. This should be invoked after 5484 * Clears all references to the v8::Platform. This should be invoked after
5473 * V8 was disposed. 5485 * V8 was disposed.
5474 */ 5486 */
5475 static void ShutdownPlatform(); 5487 static void ShutdownPlatform();
5476 5488
5477 private: 5489 private:
5478 V8(); 5490 V8();
5479 5491
5492 enum WeakHandleType { PhantomHandle, NonphantomHandle };
5493
5480 static internal::Object** GlobalizeReference(internal::Isolate* isolate, 5494 static internal::Object** GlobalizeReference(internal::Isolate* isolate,
5481 internal::Object** handle); 5495 internal::Object** handle);
5482 static internal::Object** CopyPersistent(internal::Object** handle); 5496 static internal::Object** CopyPersistent(internal::Object** handle);
5483 static void DisposeGlobal(internal::Object** global_handle); 5497 static void DisposeGlobal(internal::Object** global_handle);
5484 typedef WeakCallbackData<Value, void>::Callback WeakCallback; 5498 typedef WeakCallbackData<Value, void>::Callback WeakCallback;
5485 static void MakeWeak(internal::Object** global_handle, 5499 static void MakeWeak(internal::Object** global_handle, void* data,
5486 void* data, 5500 WeakCallback weak_callback, WeakHandleType phantom);
5487 WeakCallback weak_callback);
5488 static void* ClearWeak(internal::Object** global_handle); 5501 static void* ClearWeak(internal::Object** global_handle);
5489 static void Eternalize(Isolate* isolate, 5502 static void Eternalize(Isolate* isolate,
5490 Value* handle, 5503 Value* handle,
5491 int* index); 5504 int* index);
5492 static Local<Value> GetEternal(Isolate* isolate, int index); 5505 static Local<Value> GetEternal(Isolate* isolate, int index);
5493 5506
5494 template <class T> friend class Handle; 5507 template <class T> friend class Handle;
5495 template <class T> friend class Local; 5508 template <class T> friend class Local;
5496 template <class T> friend class Eternal; 5509 template <class T> friend class Eternal;
5497 template <class T> friend class PersistentBase; 5510 template <class T> friend class PersistentBase;
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
6348 } 6361 }
6349 6362
6350 6363
6351 template <class T> 6364 template <class T>
6352 template <typename S, typename P> 6365 template <typename S, typename P>
6353 void PersistentBase<T>::SetWeak( 6366 void PersistentBase<T>::SetWeak(
6354 P* parameter, 6367 P* parameter,
6355 typename WeakCallbackData<S, P>::Callback callback) { 6368 typename WeakCallbackData<S, P>::Callback callback) {
6356 TYPE_CHECK(S, T); 6369 TYPE_CHECK(S, T);
6357 typedef typename WeakCallbackData<Value, void>::Callback Callback; 6370 typedef typename WeakCallbackData<Value, void>::Callback Callback;
6358 V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), 6371 V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), parameter,
6359 parameter, 6372 reinterpret_cast<Callback>(callback), V8::NonphantomHandle);
6360 reinterpret_cast<Callback>(callback));
6361 } 6373 }
6362 6374
6363 6375
6364 template <class T> 6376 template <class T>
6365 template <typename P> 6377 template <typename P>
6366 void PersistentBase<T>::SetWeak( 6378 void PersistentBase<T>::SetWeak(
6367 P* parameter, 6379 P* parameter,
6368 typename WeakCallbackData<T, P>::Callback callback) { 6380 typename WeakCallbackData<T, P>::Callback callback) {
6369 SetWeak<T, P>(parameter, callback); 6381 SetWeak<T, P>(parameter, callback);
6370 } 6382 }
6371 6383
6372 6384
6373 template <class T> 6385 template <class T>
6374 template<typename P> 6386 template <typename S, typename P>
6387 void PersistentBase<T>::SetPhantom(
6388 P* parameter, typename WeakCallbackData<S, P>::Callback callback) {
6389 TYPE_CHECK(S, T);
6390 typedef typename WeakCallbackData<Value, void>::Callback Callback;
6391 V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), parameter,
6392 reinterpret_cast<Callback>(callback), V8::PhantomHandle);
6393 }
6394
6395
6396 template <class T>
6397 template <typename P>
6398 void PersistentBase<T>::SetPhantom(
6399 P* parameter, typename WeakCallbackData<T, P>::Callback callback) {
6400 SetPhantom<T, P>(parameter, callback);
6401 }
6402
6403
6404 template <class T>
6405 template <typename P>
6375 P* PersistentBase<T>::ClearWeak() { 6406 P* PersistentBase<T>::ClearWeak() {
6376 return reinterpret_cast<P*>( 6407 return reinterpret_cast<P*>(
6377 V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_))); 6408 V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_)));
6378 } 6409 }
6379 6410
6380 6411
6381 template <class T> 6412 template <class T>
6382 void PersistentBase<T>::MarkIndependent() { 6413 void PersistentBase<T>::MarkIndependent() {
6383 typedef internal::Internals I; 6414 typedef internal::Internals I;
6384 if (this->IsEmpty()) return; 6415 if (this->IsEmpty()) return;
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after
7356 */ 7387 */
7357 7388
7358 7389
7359 } // namespace v8 7390 } // namespace v8
7360 7391
7361 7392
7362 #undef TYPE_CHECK 7393 #undef TYPE_CHECK
7363 7394
7364 7395
7365 #endif // V8_H_ 7396 #endif // V8_H_
OLDNEW
« no previous file with comments | « no previous file | src/api.cc » ('j') | src/global-handles.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698