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 21 matching lines...) Expand all Loading... | |
32 * This set of documents provides reference material generated from the | 32 * This set of documents provides reference material generated from the |
33 * V8 header file, include/v8.h. | 33 * V8 header file, include/v8.h. |
34 * | 34 * |
35 * For other documentation see http://code.google.com/apis/v8/ | 35 * For other documentation see http://code.google.com/apis/v8/ |
36 */ | 36 */ |
37 | 37 |
38 #ifndef V8_H_ | 38 #ifndef V8_H_ |
39 #define V8_H_ | 39 #define V8_H_ |
40 | 40 |
41 // TODO(svenpanne) Remove me when the Chrome bindings are adapted. | 41 // TODO(svenpanne) Remove me when the Chrome bindings are adapted. |
42 #define V8_DISABLE_DEPRECATIONS 1 | 42 // #define V8_DISABLE_DEPRECATIONS 1 |
43 | 43 |
44 #include "v8stdint.h" | 44 #include "v8stdint.h" |
45 | 45 |
46 #ifdef _WIN32 | 46 #ifdef _WIN32 |
47 | 47 |
48 // Setup for Windows DLL export/import. When building the V8 DLL the | 48 // Setup for Windows DLL export/import. When building the V8 DLL the |
49 // BUILDING_V8_SHARED needs to be defined. When building a program which uses | 49 // BUILDING_V8_SHARED needs to be defined. When building a program which uses |
50 // the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 | 50 // the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 |
51 // static library or building a program which uses the V8 static library neither | 51 // static library or building a program which uses the V8 static library neither |
52 // BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. | 52 // BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
150 * | 150 * |
151 * This callback should either explicitly invoke Dispose on |object| if | 151 * This callback should either explicitly invoke Dispose on |object| if |
152 * V8 wrapper is not needed anymore, or 'revive' it by invocation of MakeWeak. | 152 * V8 wrapper is not needed anymore, or 'revive' it by invocation of MakeWeak. |
153 * | 153 * |
154 * \param object the weak global object to be reclaimed by the garbage collector | 154 * \param object the weak global object to be reclaimed by the garbage collector |
155 * \param parameter the value passed in when making the weak global object | 155 * \param parameter the value passed in when making the weak global object |
156 */ | 156 */ |
157 typedef void (*WeakReferenceCallback)(Persistent<Value> object, | 157 typedef void (*WeakReferenceCallback)(Persistent<Value> object, |
158 void* parameter); | 158 void* parameter); |
159 | 159 |
160 // TODO(svenpanne) Temporary definition until Chrome is in sync. | |
161 typedef void (*NearDeathCallback)(Isolate* isolate, | |
162 Persistent<Value> object, | |
163 void* parameter); | |
160 | 164 |
161 // --- Handles --- | 165 // --- Handles --- |
162 | 166 |
163 #define TYPE_CHECK(T, S) \ | 167 #define TYPE_CHECK(T, S) \ |
164 while (false) { \ | 168 while (false) { \ |
165 *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \ | 169 *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \ |
166 } | 170 } |
167 | 171 |
168 /** | 172 /** |
169 * An object reference managed by the v8 garbage collector. | 173 * An object reference managed by the v8 garbage collector. |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
382 // that the handle isn't empty before doing the checked cast. | 386 // that the handle isn't empty before doing the checked cast. |
383 if (that.IsEmpty()) return Persistent<T>(); | 387 if (that.IsEmpty()) return Persistent<T>(); |
384 #endif | 388 #endif |
385 return Persistent<T>(T::Cast(*that)); | 389 return Persistent<T>(T::Cast(*that)); |
386 } | 390 } |
387 | 391 |
388 template <class S> V8_INLINE(Persistent<S> As()) { | 392 template <class S> V8_INLINE(Persistent<S> As()) { |
389 return Persistent<S>::Cast(*this); | 393 return Persistent<S>::Cast(*this); |
390 } | 394 } |
391 | 395 |
392 /** | 396 /** Deprecated. Use Isolate version instead. */ |
393 * Creates a new persistent handle for an existing local or | |
394 * persistent handle. | |
395 */ | |
396 V8_INLINE(static Persistent<T> New(Handle<T> that)); | 397 V8_INLINE(static Persistent<T> New(Handle<T> that)); |
Michael Starzinger
2013/01/24 13:09:05
Should this be marked deprecated?
Sven Panne
2013/01/25 08:28:40
Done.
| |
397 | 398 |
398 /** | 399 /** |
400 * Creates a new persistent handle for an existing local or persistent handle. | |
401 */ | |
402 V8_INLINE(static Persistent<T> New(Isolate* isolate, Handle<T> that)); | |
403 | |
404 /** Deprecated. Use Isolate version instead. */ | |
405 V8_DEPRECATED(void Dispose()); | |
406 | |
407 /** | |
399 * Releases the storage cell referenced by this persistent handle. | 408 * Releases the storage cell referenced by this persistent handle. |
400 * Does not remove the reference to the cell from any handles. | 409 * Does not remove the reference to the cell from any handles. |
401 * This handle's reference, and any other references to the storage | 410 * This handle's reference, and any other references to the storage |
402 * cell remain and IsEmpty will still return false. | 411 * cell remain and IsEmpty will still return false. |
403 */ | 412 */ |
404 V8_INLINE(void Dispose()); | |
405 V8_INLINE(void Dispose(Isolate* isolate)); | 413 V8_INLINE(void Dispose(Isolate* isolate)); |
406 | 414 |
415 /** Deprecated. Use Isolate version instead. */ | |
416 V8_DEPRECATED(void MakeWeak(void* parameters, | |
417 WeakReferenceCallback callback)); | |
418 | |
407 /** | 419 /** |
408 * Make the reference to this object weak. When only weak handles | 420 * Make the reference to this object weak. When only weak handles |
409 * refer to the object, the garbage collector will perform a | 421 * refer to the object, the garbage collector will perform a |
410 * callback to the given V8::WeakReferenceCallback function, passing | 422 * callback to the given V8::NearDeathCallback function, passing |
411 * it the object reference and the given parameters. | 423 * it the object reference and the given parameters. |
412 */ | 424 */ |
413 V8_INLINE(void MakeWeak(void* parameters, WeakReferenceCallback callback)); | |
414 V8_INLINE(void MakeWeak(Isolate* isolate, | 425 V8_INLINE(void MakeWeak(Isolate* isolate, |
415 void* parameters, | 426 void* parameters, |
416 WeakReferenceCallback callback)); | 427 NearDeathCallback callback)); |
428 | |
429 /** Deprecated. Use Isolate version instead. */ | |
430 V8_DEPRECATED(void ClearWeak()); | |
417 | 431 |
418 /** Clears the weak reference to this object. */ | 432 /** Clears the weak reference to this object. */ |
419 V8_INLINE(void ClearWeak()); | 433 V8_INLINE(void ClearWeak(Isolate* isolate)); |
434 | |
435 /** Deprecated. Use Isolate version instead. */ | |
436 V8_DEPRECATED(void MarkIndependent()); | |
420 | 437 |
421 /** | 438 /** |
422 * Marks the reference to this object independent. Garbage collector | 439 * Marks the reference to this object independent. Garbage collector is free |
423 * is free to ignore any object groups containing this object. | 440 * to ignore any object groups containing this object. Weak callback for an |
424 * Weak callback for an independent handle should not | 441 * independent handle should not assume that it will be preceded by a global |
425 * assume that it will be preceded by a global GC prologue callback | 442 * GC prologue callback or followed by a global GC epilogue callback. |
426 * or followed by a global GC epilogue callback. | |
427 */ | 443 */ |
428 V8_INLINE(void MarkIndependent()); | |
429 V8_INLINE(void MarkIndependent(Isolate* isolate)); | 444 V8_INLINE(void MarkIndependent(Isolate* isolate)); |
430 | 445 |
446 /** Deprecated. Use Isolate version instead. */ | |
447 V8_DEPRECATED(void MarkPartiallyDependent()); | |
448 | |
431 /** | 449 /** |
432 * Marks the reference to this object partially dependent. Partially | 450 * Marks the reference to this object partially dependent. Partially dependent |
433 * dependent handles only depend on other partially dependent handles and | 451 * handles only depend on other partially dependent handles and these |
434 * these dependencies are provided through object groups. It provides a way | 452 * dependencies are provided through object groups. It provides a way to build |
435 * to build smaller object groups for young objects that represent only a | 453 * smaller object groups for young objects that represent only a subset of all |
436 * subset of all external dependencies. This mark is automatically cleared | 454 * external dependencies. This mark is automatically cleared after each |
437 * after each garbage collection. | 455 * garbage collection. |
438 */ | 456 */ |
439 V8_INLINE(void MarkPartiallyDependent()); | |
440 V8_INLINE(void MarkPartiallyDependent(Isolate* isolate)); | 457 V8_INLINE(void MarkPartiallyDependent(Isolate* isolate)); |
441 | 458 |
459 /** Deprecated. Use Isolate version instead. */ | |
460 V8_DEPRECATED(bool IsIndependent() const); | |
461 | |
442 /** Returns true if this handle was previously marked as independent. */ | 462 /** Returns true if this handle was previously marked as independent. */ |
443 V8_INLINE(bool IsIndependent() const); | |
444 V8_INLINE(bool IsIndependent(Isolate* isolate) const); | 463 V8_INLINE(bool IsIndependent(Isolate* isolate) const); |
445 | 464 |
446 /** Checks if the handle holds the only reference to an object. */ | 465 /** Deprecated. Use Isolate version instead. */ |
447 V8_INLINE(bool IsNearDeath() const); | 466 V8_INLINE(bool IsNearDeath() const); |
Michael Starzinger
2013/01/24 13:09:05
Should this be marked deprecated?
Sven Panne
2013/01/25 08:28:40
Done.
| |
448 | 467 |
468 /** Checks if the handle holds the only reference to an object. */ | |
469 V8_INLINE(bool IsNearDeath(Isolate* isolate) const); | |
470 | |
471 /** Deprecated. Use Isolate version instead. */ | |
472 V8_DEPRECATED(bool IsWeak() const); | |
473 | |
449 /** Returns true if the handle's reference is weak. */ | 474 /** Returns true if the handle's reference is weak. */ |
450 V8_INLINE(bool IsWeak() const); | |
451 V8_INLINE(bool IsWeak(Isolate* isolate) const); | 475 V8_INLINE(bool IsWeak(Isolate* isolate) const); |
452 | 476 |
453 /** | 477 /** Deprecated. Use Isolate version instead. */ |
454 * Assigns a wrapper class ID to the handle. See RetainedObjectInfo | |
455 * interface description in v8-profiler.h for details. | |
456 */ | |
457 V8_INLINE(void SetWrapperClassId(uint16_t class_id)); | 478 V8_INLINE(void SetWrapperClassId(uint16_t class_id)); |
Michael Starzinger
2013/01/24 13:09:05
Should this be marked deprecated?
Sven Panne
2013/01/25 08:28:40
Done.
| |
458 | 479 |
459 /** | 480 /** |
460 * Returns the class ID previously assigned to this handle or 0 if no class | 481 * Assigns a wrapper class ID to the handle. See RetainedObjectInfo interface |
461 * ID was previously assigned. | 482 * description in v8-profiler.h for details. |
462 */ | 483 */ |
463 V8_INLINE(uint16_t WrapperClassId() const); | 484 V8_INLINE(void SetWrapperClassId(Isolate* isolate, uint16_t class_id)); |
485 | |
486 /** Deprecated. Use Isolate version instead. */ | |
487 V8_DEPRECATED(uint16_t WrapperClassId() const); | |
488 | |
489 /** | |
490 * Returns the class ID previously assigned to this handle or 0 if no class ID | |
491 * was previously assigned. | |
492 */ | |
493 V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const); | |
464 | 494 |
465 private: | 495 private: |
466 friend class ImplementationUtilities; | 496 friend class ImplementationUtilities; |
467 friend class ObjectTemplate; | 497 friend class ObjectTemplate; |
468 }; | 498 }; |
469 | 499 |
470 | 500 |
471 /** | 501 /** |
472 * A stack-allocated class that governs a number of local handles. | 502 * A stack-allocated class that governs a number of local handles. |
473 * After a handle scope has been created, all local handles will be | 503 * After a handle scope has been created, all local handles will be |
(...skipping 3038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3512 * Optional notification that a context has been disposed. V8 uses | 3542 * Optional notification that a context has been disposed. V8 uses |
3513 * these notifications to guide the GC heuristic. Returns the number | 3543 * these notifications to guide the GC heuristic. Returns the number |
3514 * of context disposals - including this one - since the last time | 3544 * of context disposals - including this one - since the last time |
3515 * V8 had a chance to clean up. | 3545 * V8 had a chance to clean up. |
3516 */ | 3546 */ |
3517 static int ContextDisposedNotification(); | 3547 static int ContextDisposedNotification(); |
3518 | 3548 |
3519 private: | 3549 private: |
3520 V8(); | 3550 V8(); |
3521 | 3551 |
3522 static internal::Object** GlobalizeReference(internal::Object** handle); | 3552 static internal::Object** GlobalizeReference(internal::Isolate* isolate, |
3523 static void DisposeGlobal(internal::Object** global_handle); | 3553 internal::Object** handle); |
3524 static void DisposeGlobal(internal::Isolate* isolate, | 3554 static void DisposeGlobal(internal::Isolate* isolate, |
3525 internal::Object** global_handle); | 3555 internal::Object** global_handle); |
3526 static void MakeWeak(internal::Object** global_handle, | |
3527 void* data, | |
3528 WeakReferenceCallback); | |
3529 static void MakeWeak(internal::Isolate* isolate, | 3556 static void MakeWeak(internal::Isolate* isolate, |
3530 internal::Object** global_handle, | 3557 internal::Object** global_handle, |
3531 void* data, | 3558 void* data, |
3532 WeakReferenceCallback); | 3559 WeakReferenceCallback weak_reference_callback, |
3533 static void ClearWeak(internal::Object** global_handle); | 3560 NearDeathCallback near_death_callback); |
3534 static void MarkIndependent(internal::Object** global_handle); | 3561 static void ClearWeak(internal::Isolate* isolate, |
3535 static void MarkIndependent(internal::Isolate* isolate, | 3562 internal::Object** global_handle); |
3536 internal::Object** global_handle); | |
3537 static void MarkPartiallyDependent(internal::Object** global_handle); | |
3538 static void MarkPartiallyDependent(internal::Isolate* isolate, | |
3539 internal::Object** global_handle); | |
3540 static bool IsGlobalIndependent(internal::Object** global_handle); | |
3541 static bool IsGlobalIndependent(internal::Isolate* isolate, | |
3542 internal::Object** global_handle); | |
3543 static bool IsGlobalNearDeath(internal::Object** global_handle); | |
3544 static bool IsGlobalWeak(internal::Object** global_handle); | |
3545 static bool IsGlobalWeak(internal::Isolate* isolate, | |
3546 internal::Object** global_handle); | |
3547 | 3563 |
3548 template <class T> friend class Handle; | 3564 template <class T> friend class Handle; |
3549 template <class T> friend class Local; | 3565 template <class T> friend class Local; |
3550 template <class T> friend class Persistent; | 3566 template <class T> friend class Persistent; |
3551 friend class Context; | 3567 friend class Context; |
3552 }; | 3568 }; |
3553 | 3569 |
3554 | 3570 |
3555 /** | 3571 /** |
3556 * An external exception handler. | 3572 * An external exception handler. |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3957 * // V8 Now no longer locked. | 3973 * // V8 Now no longer locked. |
3958 * \endcode | 3974 * \endcode |
3959 */ | 3975 */ |
3960 class V8EXPORT Unlocker { | 3976 class V8EXPORT Unlocker { |
3961 public: | 3977 public: |
3962 /** | 3978 /** |
3963 * Initialize Unlocker for a given Isolate. | 3979 * Initialize Unlocker for a given Isolate. |
3964 */ | 3980 */ |
3965 V8_INLINE(explicit Unlocker(Isolate* isolate)) { Initialize(isolate); } | 3981 V8_INLINE(explicit Unlocker(Isolate* isolate)) { Initialize(isolate); } |
3966 | 3982 |
3967 /** | 3983 /** Deprecated. Use Isolate version instead. */ |
3968 * Deprecated. Use Isolate version instead. | |
3969 */ | |
3970 V8_DEPRECATED(Unlocker()); | 3984 V8_DEPRECATED(Unlocker()); |
3971 | 3985 |
3972 ~Unlocker(); | 3986 ~Unlocker(); |
3973 private: | 3987 private: |
3974 void Initialize(Isolate* isolate); | 3988 void Initialize(Isolate* isolate); |
3975 | 3989 |
3976 internal::Isolate* isolate_; | 3990 internal::Isolate* isolate_; |
3977 }; | 3991 }; |
3978 | 3992 |
3979 | 3993 |
3980 class V8EXPORT Locker { | 3994 class V8EXPORT Locker { |
3981 public: | 3995 public: |
3982 /** | 3996 /** |
3983 * Initialize Locker for a given Isolate. | 3997 * Initialize Locker for a given Isolate. |
3984 */ | 3998 */ |
3985 V8_INLINE(explicit Locker(Isolate* isolate)) { Initialize(isolate); } | 3999 V8_INLINE(explicit Locker(Isolate* isolate)) { Initialize(isolate); } |
3986 | 4000 |
3987 /** | 4001 /** Deprecated. Use Isolate version instead. */ |
3988 * Deprecated. Use Isolate version instead. | |
3989 */ | |
3990 V8_DEPRECATED(Locker()); | 4002 V8_DEPRECATED(Locker()); |
3991 | 4003 |
3992 ~Locker(); | 4004 ~Locker(); |
3993 | 4005 |
3994 /** | 4006 /** |
3995 * Start preemption. | 4007 * Start preemption. |
3996 * | 4008 * |
3997 * When preemption is started, a timer is fired every n milliseconds | 4009 * When preemption is started, a timer is fired every n milliseconds |
3998 * that will switch between multiple threads that are in contention | 4010 * that will switch between multiple threads that are in contention |
3999 * for the V8 lock. | 4011 * for the V8 lock. |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4158 static const int kContextHeaderSize = 2 * kApiPointerSize; | 4170 static const int kContextHeaderSize = 2 * kApiPointerSize; |
4159 static const int kContextEmbedderDataIndex = 54; | 4171 static const int kContextEmbedderDataIndex = 54; |
4160 static const int kFullStringRepresentationMask = 0x07; | 4172 static const int kFullStringRepresentationMask = 0x07; |
4161 static const int kStringEncodingMask = 0x4; | 4173 static const int kStringEncodingMask = 0x4; |
4162 static const int kExternalTwoByteRepresentationTag = 0x02; | 4174 static const int kExternalTwoByteRepresentationTag = 0x02; |
4163 static const int kExternalAsciiRepresentationTag = 0x06; | 4175 static const int kExternalAsciiRepresentationTag = 0x06; |
4164 | 4176 |
4165 static const int kIsolateStateOffset = 0; | 4177 static const int kIsolateStateOffset = 0; |
4166 static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize; | 4178 static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize; |
4167 static const int kIsolateRootsOffset = 3 * kApiPointerSize; | 4179 static const int kIsolateRootsOffset = 3 * kApiPointerSize; |
4168 static const int kNodeClassIdOffset = 1 * kApiPointerSize; | |
4169 static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3; | |
4170 static const int kUndefinedValueRootIndex = 5; | 4180 static const int kUndefinedValueRootIndex = 5; |
4171 static const int kNullValueRootIndex = 7; | 4181 static const int kNullValueRootIndex = 7; |
4172 static const int kTrueValueRootIndex = 8; | 4182 static const int kTrueValueRootIndex = 8; |
4173 static const int kFalseValueRootIndex = 9; | 4183 static const int kFalseValueRootIndex = 9; |
4174 static const int kEmptySymbolRootIndex = 119; | 4184 static const int kEmptySymbolRootIndex = 119; |
4175 | 4185 |
4186 static const int kNodeClassIdOffset = 1 * kApiPointerSize; | |
4187 static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3; | |
4188 static const int kNodeStateMask = 0xf; | |
4189 static const int kNodeStateIsWeakValue = 2; | |
4190 static const int kNodeStateIsNearDeathValue = 4; | |
4176 static const int kNodeIsIndependentShift = 4; | 4191 static const int kNodeIsIndependentShift = 4; |
4177 static const int kNodeIsPartiallyDependentShift = 5; | 4192 static const int kNodeIsPartiallyDependentShift = 5; |
4178 | 4193 |
4179 static const int kJSObjectType = 0xab; | 4194 static const int kJSObjectType = 0xab; |
4180 static const int kFirstNonstringType = 0x80; | 4195 static const int kFirstNonstringType = 0x80; |
4181 static const int kOddballType = 0x82; | 4196 static const int kOddballType = 0x82; |
4182 static const int kForeignType = 0x85; | 4197 static const int kForeignType = 0x85; |
4183 | 4198 |
4184 static const int kUndefinedOddballKind = 5; | 4199 static const int kUndefinedOddballKind = 5; |
4185 static const int kNullOddballKind = 3; | 4200 static const int kNullOddballKind = 3; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4219 return *addr & (1 << shift); | 4234 return *addr & (1 << shift); |
4220 } | 4235 } |
4221 | 4236 |
4222 V8_INLINE(static void UpdateNodeFlag(internal::Object** obj, | 4237 V8_INLINE(static void UpdateNodeFlag(internal::Object** obj, |
4223 bool value, int shift)) { | 4238 bool value, int shift)) { |
4224 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; | 4239 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; |
4225 uint8_t mask = 1 << shift; | 4240 uint8_t mask = 1 << shift; |
4226 *addr = (*addr & ~mask) | (value << shift); | 4241 *addr = (*addr & ~mask) | (value << shift); |
4227 } | 4242 } |
4228 | 4243 |
4244 V8_INLINE(static uint8_t GetNodeState(internal::Object** obj)) { | |
4245 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; | |
4246 return *addr & kNodeStateMask; | |
4247 } | |
4248 | |
4249 V8_INLINE(static void UpdateNodeState(internal::Object** obj, | |
4250 uint8_t value)) { | |
4251 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; | |
4252 *addr = (*addr & ~kNodeStateMask) | value; | |
4253 } | |
4254 | |
4229 V8_INLINE(static void SetEmbedderData(v8::Isolate* isolate, void* data)) { | 4255 V8_INLINE(static void SetEmbedderData(v8::Isolate* isolate, void* data)) { |
4230 uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + | 4256 uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + |
4231 kIsolateEmbedderDataOffset; | 4257 kIsolateEmbedderDataOffset; |
4232 *reinterpret_cast<void**>(addr) = data; | 4258 *reinterpret_cast<void**>(addr) = data; |
4233 } | 4259 } |
4234 | 4260 |
4235 V8_INLINE(static void* GetEmbedderData(v8::Isolate* isolate)) { | 4261 V8_INLINE(static void* GetEmbedderData(v8::Isolate* isolate)) { |
4236 uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + | 4262 uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + |
4237 kIsolateEmbedderDataOffset; | 4263 kIsolateEmbedderDataOffset; |
4238 return *reinterpret_cast<void**>(addr); | 4264 return *reinterpret_cast<void**>(addr); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4286 internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); | 4312 internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); |
4287 if (internal::Internals::CanCastToHeapObject(that_ptr)) { | 4313 if (internal::Internals::CanCastToHeapObject(that_ptr)) { |
4288 return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( | 4314 return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( |
4289 reinterpret_cast<internal::HeapObject*>(*p)))); | 4315 reinterpret_cast<internal::HeapObject*>(*p)))); |
4290 } | 4316 } |
4291 return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(*p))); | 4317 return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(*p))); |
4292 } | 4318 } |
4293 | 4319 |
4294 | 4320 |
4295 template <class T> | 4321 template <class T> |
4296 Local<T> Local<T>::New(Isolate* isolate, Handle<T> that) { | 4322 Local<T> Local<T>::New(Isolate* isolate, Handle<T> that) { |
4297 if (that.IsEmpty()) return Local<T>(); | 4323 if (that.IsEmpty()) return Local<T>(); |
4298 T* that_ptr = *that; | 4324 T* that_ptr = *that; |
4299 internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); | 4325 internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); |
4300 return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( | 4326 return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( |
4301 reinterpret_cast<internal::Isolate*>(isolate), *p))); | 4327 reinterpret_cast<internal::Isolate*>(isolate), *p))); |
4302 } | 4328 } |
4303 | 4329 |
4304 | 4330 |
4305 template <class T> | 4331 template <class T> |
4306 Persistent<T> Persistent<T>::New(Handle<T> that) { | 4332 Persistent<T> Persistent<T>::New(Handle<T> that) { |
4333 return New(Isolate::GetCurrent(), that); | |
4334 } | |
4335 | |
4336 | |
4337 template <class T> | |
4338 Persistent<T> Persistent<T>::New(Isolate* isolate, Handle<T> that) { | |
4307 if (that.IsEmpty()) return Persistent<T>(); | 4339 if (that.IsEmpty()) return Persistent<T>(); |
4308 internal::Object** p = reinterpret_cast<internal::Object**>(*that); | 4340 internal::Object** p = reinterpret_cast<internal::Object**>(*that); |
4309 return Persistent<T>(reinterpret_cast<T*>(V8::GlobalizeReference(p))); | 4341 return Persistent<T>(reinterpret_cast<T*>( |
4342 V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), | |
4343 p))); | |
4310 } | 4344 } |
4311 | 4345 |
4312 | 4346 |
4313 template <class T> | 4347 template <class T> |
4314 bool Persistent<T>::IsIndependent() const { | 4348 bool Persistent<T>::IsIndependent() const { |
4315 if (this->IsEmpty()) return false; | 4349 return IsIndependent(Isolate::GetCurrent()); |
4316 return V8::IsGlobalIndependent(reinterpret_cast<internal::Object**>(**this)); | |
4317 } | 4350 } |
4318 | 4351 |
4319 | 4352 |
4320 template <class T> | 4353 template <class T> |
4321 bool Persistent<T>::IsIndependent(Isolate* isolate) const { | 4354 bool Persistent<T>::IsIndependent(Isolate* isolate) const { |
4322 typedef internal::Internals I; | 4355 typedef internal::Internals I; |
4323 if (this->IsEmpty()) return false; | 4356 if (this->IsEmpty()) return false; |
4324 if (!I::IsInitialized(isolate)) return false; | 4357 if (!I::IsInitialized(isolate)) return false; |
4325 return I::GetNodeFlag(reinterpret_cast<internal::Object**>(**this), | 4358 return I::GetNodeFlag(reinterpret_cast<internal::Object**>(**this), |
4326 I::kNodeIsIndependentShift); | 4359 I::kNodeIsIndependentShift); |
4327 } | 4360 } |
4328 | 4361 |
4329 | 4362 |
4330 template <class T> | 4363 template <class T> |
4331 bool Persistent<T>::IsNearDeath() const { | 4364 bool Persistent<T>::IsNearDeath() const { |
4365 return IsNearDeath(Isolate::GetCurrent()); | |
4366 } | |
4367 | |
4368 | |
4369 template <class T> | |
4370 bool Persistent<T>::IsNearDeath(Isolate* isolate) const { | |
4371 typedef internal::Internals I; | |
4332 if (this->IsEmpty()) return false; | 4372 if (this->IsEmpty()) return false; |
4333 return V8::IsGlobalNearDeath(reinterpret_cast<internal::Object**>(**this)); | 4373 if (!I::IsInitialized(isolate)) return false; |
4374 return I::GetNodeState(reinterpret_cast<internal::Object**>(**this)) == | |
4375 I::kNodeStateIsNearDeathValue; | |
4334 } | 4376 } |
4335 | 4377 |
4336 | 4378 |
4337 template <class T> | 4379 template <class T> |
4338 bool Persistent<T>::IsWeak() const { | 4380 bool Persistent<T>::IsWeak() const { |
4339 if (this->IsEmpty()) return false; | 4381 return IsWeak(Isolate::GetCurrent()); |
4340 return V8::IsGlobalWeak(reinterpret_cast<internal::Object**>(**this)); | |
4341 } | 4382 } |
4342 | 4383 |
4343 | 4384 |
4344 template <class T> | 4385 template <class T> |
4345 bool Persistent<T>::IsWeak(Isolate* isolate) const { | 4386 bool Persistent<T>::IsWeak(Isolate* isolate) const { |
4387 typedef internal::Internals I; | |
4346 if (this->IsEmpty()) return false; | 4388 if (this->IsEmpty()) return false; |
4347 return V8::IsGlobalWeak(reinterpret_cast<internal::Isolate*>(isolate), | 4389 if (!I::IsInitialized(isolate)) return false; |
4348 reinterpret_cast<internal::Object**>(**this)); | 4390 return I::GetNodeState(reinterpret_cast<internal::Object**>(**this)) == |
4391 I::kNodeStateIsWeakValue; | |
4349 } | 4392 } |
4350 | 4393 |
4351 | 4394 |
4352 template <class T> | 4395 template <class T> |
4353 void Persistent<T>::Dispose() { | 4396 void Persistent<T>::Dispose() { |
4354 if (this->IsEmpty()) return; | 4397 Dispose(Isolate::GetCurrent()); |
4355 V8::DisposeGlobal(reinterpret_cast<internal::Object**>(**this)); | |
4356 } | 4398 } |
4357 | 4399 |
4358 | 4400 |
4359 template <class T> | 4401 template <class T> |
4360 void Persistent<T>::Dispose(Isolate* isolate) { | 4402 void Persistent<T>::Dispose(Isolate* isolate) { |
4361 if (this->IsEmpty()) return; | 4403 if (this->IsEmpty()) return; |
4362 V8::DisposeGlobal(reinterpret_cast<internal::Isolate*>(isolate), | 4404 V8::DisposeGlobal(reinterpret_cast<internal::Isolate*>(isolate), |
4363 reinterpret_cast<internal::Object**>(**this)); | 4405 reinterpret_cast<internal::Object**>(**this)); |
4364 } | 4406 } |
4365 | 4407 |
4366 | 4408 |
4367 template <class T> | 4409 template <class T> |
4368 Persistent<T>::Persistent() : Handle<T>() { } | 4410 Persistent<T>::Persistent() : Handle<T>() { } |
4369 | 4411 |
4370 template <class T> | 4412 template <class T> |
4371 void Persistent<T>::MakeWeak(void* parameters, WeakReferenceCallback callback) { | 4413 void Persistent<T>::MakeWeak(void* parameters, WeakReferenceCallback callback) { |
4372 V8::MakeWeak(reinterpret_cast<internal::Object**>(**this), | 4414 Isolate* isolate = Isolate::GetCurrent(); |
4415 V8::MakeWeak(reinterpret_cast<internal::Isolate*>(isolate), | |
4416 reinterpret_cast<internal::Object**>(**this), | |
4373 parameters, | 4417 parameters, |
4374 callback); | 4418 callback, |
4419 NULL); | |
4375 } | 4420 } |
4376 | 4421 |
4377 template <class T> | 4422 template <class T> |
4378 void Persistent<T>::MakeWeak(Isolate* isolate, void* parameters, | 4423 void Persistent<T>::MakeWeak(Isolate* isolate, |
4379 WeakReferenceCallback callback) { | 4424 void* parameters, |
4425 NearDeathCallback callback) { | |
4380 V8::MakeWeak(reinterpret_cast<internal::Isolate*>(isolate), | 4426 V8::MakeWeak(reinterpret_cast<internal::Isolate*>(isolate), |
4381 reinterpret_cast<internal::Object**>(**this), | 4427 reinterpret_cast<internal::Object**>(**this), |
4382 parameters, | 4428 parameters, |
4429 NULL, | |
4383 callback); | 4430 callback); |
4384 } | 4431 } |
4385 | 4432 |
4386 template <class T> | 4433 template <class T> |
4387 void Persistent<T>::ClearWeak() { | 4434 void Persistent<T>::ClearWeak() { |
4388 V8::ClearWeak(reinterpret_cast<internal::Object**>(**this)); | 4435 ClearWeak(Isolate::GetCurrent()); |
4436 } | |
4437 | |
4438 template <class T> | |
4439 void Persistent<T>::ClearWeak(Isolate* isolate) { | |
4440 V8::ClearWeak(reinterpret_cast<internal::Isolate*>(isolate), | |
4441 reinterpret_cast<internal::Object**>(**this)); | |
4389 } | 4442 } |
4390 | 4443 |
4391 template <class T> | 4444 template <class T> |
4392 void Persistent<T>::MarkIndependent() { | 4445 void Persistent<T>::MarkIndependent() { |
4393 V8::MarkIndependent(reinterpret_cast<internal::Object**>(**this)); | 4446 MarkIndependent(Isolate::GetCurrent()); |
4394 } | 4447 } |
4395 | 4448 |
4396 template <class T> | 4449 template <class T> |
4397 void Persistent<T>::MarkIndependent(Isolate* isolate) { | 4450 void Persistent<T>::MarkIndependent(Isolate* isolate) { |
4398 typedef internal::Internals I; | 4451 typedef internal::Internals I; |
4399 if (this->IsEmpty()) return; | 4452 if (this->IsEmpty()) return; |
4400 if (!I::IsInitialized(isolate)) return; | 4453 if (!I::IsInitialized(isolate)) return; |
4401 I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(**this), | 4454 I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(**this), |
4402 true, I::kNodeIsIndependentShift); | 4455 true, |
4456 I::kNodeIsIndependentShift); | |
4403 } | 4457 } |
4404 | 4458 |
4405 template <class T> | 4459 template <class T> |
4406 void Persistent<T>::MarkPartiallyDependent() { | 4460 void Persistent<T>::MarkPartiallyDependent() { |
4407 V8::MarkPartiallyDependent(reinterpret_cast<internal::Object**>(**this)); | 4461 MarkPartiallyDependent(Isolate::GetCurrent()); |
4408 } | 4462 } |
4409 | 4463 |
4410 template <class T> | 4464 template <class T> |
4411 void Persistent<T>::MarkPartiallyDependent(Isolate* isolate) { | 4465 void Persistent<T>::MarkPartiallyDependent(Isolate* isolate) { |
4412 typedef internal::Internals I; | 4466 typedef internal::Internals I; |
4413 if (this->IsEmpty()) return; | 4467 if (this->IsEmpty()) return; |
4414 if (!I::IsInitialized(isolate)) return; | 4468 if (!I::IsInitialized(isolate)) return; |
4415 I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(**this), | 4469 I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(**this), |
4416 true, I::kNodeIsPartiallyDependentShift); | 4470 true, |
4471 I::kNodeIsPartiallyDependentShift); | |
4417 } | 4472 } |
4418 | 4473 |
4419 template <class T> | 4474 template <class T> |
4420 void Persistent<T>::SetWrapperClassId(uint16_t class_id) { | 4475 void Persistent<T>::SetWrapperClassId(uint16_t class_id) { |
4476 SetWrapperClassId(Isolate::GetCurrent(), class_id); | |
4477 } | |
4478 | |
4479 template <class T> | |
4480 void Persistent<T>::SetWrapperClassId(Isolate* isolate, uint16_t class_id) { | |
4421 typedef internal::Internals I; | 4481 typedef internal::Internals I; |
4482 if (this->IsEmpty()) return; | |
4483 if (!I::IsInitialized(isolate)) return; | |
4422 internal::Object** obj = reinterpret_cast<internal::Object**>(**this); | 4484 internal::Object** obj = reinterpret_cast<internal::Object**>(**this); |
4423 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; | 4485 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; |
4424 *reinterpret_cast<uint16_t*>(addr) = class_id; | 4486 *reinterpret_cast<uint16_t*>(addr) = class_id; |
4425 } | 4487 } |
4426 | 4488 |
4427 template <class T> | 4489 template <class T> |
4428 uint16_t Persistent<T>::WrapperClassId() const { | 4490 uint16_t Persistent<T>::WrapperClassId() const { |
4491 return WrapperClassId(Isolate::GetCurrent()); | |
4492 } | |
4493 | |
4494 template <class T> | |
4495 uint16_t Persistent<T>::WrapperClassId(Isolate* isolate) const { | |
4429 typedef internal::Internals I; | 4496 typedef internal::Internals I; |
4497 if (this->IsEmpty()) return 0; | |
4498 if (!I::IsInitialized(isolate)) return 0; | |
4430 internal::Object** obj = reinterpret_cast<internal::Object**>(**this); | 4499 internal::Object** obj = reinterpret_cast<internal::Object**>(**this); |
4431 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; | 4500 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; |
4432 return *reinterpret_cast<uint16_t*>(addr); | 4501 return *reinterpret_cast<uint16_t*>(addr); |
4433 } | 4502 } |
4434 | 4503 |
4435 Arguments::Arguments(internal::Object** implicit_args, | 4504 Arguments::Arguments(internal::Object** implicit_args, |
4436 internal::Object** values, int length, | 4505 internal::Object** values, int length, |
4437 bool is_construct_call) | 4506 bool is_construct_call) |
4438 : implicit_args_(implicit_args), | 4507 : implicit_args_(implicit_args), |
4439 values_(values), | 4508 values_(values), |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4849 | 4918 |
4850 | 4919 |
4851 } // namespace v8 | 4920 } // namespace v8 |
4852 | 4921 |
4853 | 4922 |
4854 #undef V8EXPORT | 4923 #undef V8EXPORT |
4855 #undef TYPE_CHECK | 4924 #undef TYPE_CHECK |
4856 | 4925 |
4857 | 4926 |
4858 #endif // V8_H_ | 4927 #endif // V8_H_ |
OLD | NEW |