| OLD | NEW |
| 1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 * an Handle<Object>); the value will still be governed by a handle | 173 * an Handle<Object>); the value will still be governed by a handle |
| 174 * behind the scenes and the same rules apply to these values as to | 174 * behind the scenes and the same rules apply to these values as to |
| 175 * their handles. | 175 * their handles. |
| 176 */ | 176 */ |
| 177 template <class T> class V8EXPORT_INLINE Handle { | 177 template <class T> class V8EXPORT_INLINE Handle { |
| 178 public: | 178 public: |
| 179 | 179 |
| 180 /** | 180 /** |
| 181 * Creates an empty handle. | 181 * Creates an empty handle. |
| 182 */ | 182 */ |
| 183 Handle(); | 183 inline Handle(); |
| 184 | 184 |
| 185 /** | 185 /** |
| 186 * Creates a new handle for the specified value. | 186 * Creates a new handle for the specified value. |
| 187 */ | 187 */ |
| 188 explicit Handle(T* val) : val_(val) { } | 188 explicit Handle(T* val) : val_(val) { } |
| 189 | 189 |
| 190 /** | 190 /** |
| 191 * Creates a handle for the contents of the specified handle. This | 191 * Creates a handle for the contents of the specified handle. This |
| 192 * constructor allows you to pass handles as arguments by value and | 192 * constructor allows you to pass handles as arguments by value and |
| 193 * to assign between handles. However, if you try to assign between | 193 * to assign between handles. However, if you try to assign between |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 257 |
| 258 /** | 258 /** |
| 259 * A light-weight stack-allocated object handle. All operations | 259 * A light-weight stack-allocated object handle. All operations |
| 260 * that return objects from within v8 return them in local handles. They | 260 * that return objects from within v8 return them in local handles. They |
| 261 * are created within HandleScopes, and all local handles allocated within a | 261 * are created within HandleScopes, and all local handles allocated within a |
| 262 * handle scope are destroyed when the handle scope is destroyed. Hence it | 262 * handle scope are destroyed when the handle scope is destroyed. Hence it |
| 263 * is not necessary to explicitly deallocate local handles. | 263 * is not necessary to explicitly deallocate local handles. |
| 264 */ | 264 */ |
| 265 template <class T> class V8EXPORT_INLINE Local : public Handle<T> { | 265 template <class T> class V8EXPORT_INLINE Local : public Handle<T> { |
| 266 public: | 266 public: |
| 267 Local(); | 267 inline Local(); |
| 268 template <class S> inline Local(Local<S> that) | 268 template <class S> inline Local(Local<S> that) |
| 269 : Handle<T>(reinterpret_cast<T*>(*that)) { | 269 : Handle<T>(reinterpret_cast<T*>(*that)) { |
| 270 /** | 270 /** |
| 271 * This check fails when trying to convert between incompatible | 271 * This check fails when trying to convert between incompatible |
| 272 * handles. For example, converting from a Handle<String> to a | 272 * handles. For example, converting from a Handle<String> to a |
| 273 * Handle<Number>. | 273 * Handle<Number>. |
| 274 */ | 274 */ |
| 275 TYPE_CHECK(T, S); | 275 TYPE_CHECK(T, S); |
| 276 } | 276 } |
| 277 template <class S> inline Local(S* that) : Handle<T>(that) { } | 277 template <class S> inline Local(S* that) : Handle<T>(that) { } |
| 278 template <class S> static inline Local<T> Cast(Local<S> that) { | 278 template <class S> static inline Local<T> Cast(Local<S> that) { |
| 279 if (that.IsEmpty()) return Local<T>(); | 279 if (that.IsEmpty()) return Local<T>(); |
| 280 return Local<T>(T::Cast(*that)); | 280 return Local<T>(T::Cast(*that)); |
| 281 } | 281 } |
| 282 | 282 |
| 283 /** Create a local handle for the content of another handle. | 283 /** Create a local handle for the content of another handle. |
| 284 * The referee is kept alive by the local handle even when | 284 * The referee is kept alive by the local handle even when |
| 285 * the original handle is destroyed/disposed. | 285 * the original handle is destroyed/disposed. |
| 286 */ | 286 */ |
| 287 static Local<T> New(Handle<T> that); | 287 inline static Local<T> New(Handle<T> that); |
| 288 }; | 288 }; |
| 289 | 289 |
| 290 | 290 |
| 291 /** | 291 /** |
| 292 * An object reference that is independent of any handle scope. Where | 292 * An object reference that is independent of any handle scope. Where |
| 293 * a Local handle only lives as long as the HandleScope in which it was | 293 * a Local handle only lives as long as the HandleScope in which it was |
| 294 * allocated, a Persistent handle remains valid until it is explicitly | 294 * allocated, a Persistent handle remains valid until it is explicitly |
| 295 * disposed. | 295 * disposed. |
| 296 * | 296 * |
| 297 * A persistent handle contains a reference to a storage cell within | 297 * A persistent handle contains a reference to a storage cell within |
| 298 * the v8 engine which holds an object value and which is updated by | 298 * the v8 engine which holds an object value and which is updated by |
| 299 * the garbage collector whenever the object is moved. A new storage | 299 * the garbage collector whenever the object is moved. A new storage |
| 300 * cell can be created using Persistent::New and existing handles can | 300 * cell can be created using Persistent::New and existing handles can |
| 301 * be disposed using Persistent::Dispose. Since persistent handles | 301 * be disposed using Persistent::Dispose. Since persistent handles |
| 302 * are passed by value you may have many persistent handle objects | 302 * are passed by value you may have many persistent handle objects |
| 303 * that point to the same storage cell. For instance, if you pass a | 303 * that point to the same storage cell. For instance, if you pass a |
| 304 * persistent handle as an argument to a function you will not get two | 304 * persistent handle as an argument to a function you will not get two |
| 305 * different storage cells but rather two references to the same | 305 * different storage cells but rather two references to the same |
| 306 * storage cell. | 306 * storage cell. |
| 307 */ | 307 */ |
| 308 template <class T> class V8EXPORT_INLINE Persistent : public Handle<T> { | 308 template <class T> class V8EXPORT_INLINE Persistent : public Handle<T> { |
| 309 public: | 309 public: |
| 310 | 310 |
| 311 /** | 311 /** |
| 312 * Creates an empty persistent handle that doesn't point to any | 312 * Creates an empty persistent handle that doesn't point to any |
| 313 * storage cell. | 313 * storage cell. |
| 314 */ | 314 */ |
| 315 Persistent(); | 315 inline Persistent(); |
| 316 | 316 |
| 317 /** | 317 /** |
| 318 * Creates a persistent handle for the same storage cell as the | 318 * Creates a persistent handle for the same storage cell as the |
| 319 * specified handle. This constructor allows you to pass persistent | 319 * specified handle. This constructor allows you to pass persistent |
| 320 * handles as arguments by value and to assign between persistent | 320 * handles as arguments by value and to assign between persistent |
| 321 * handles. However, attempting to assign between incompatible | 321 * handles. However, attempting to assign between incompatible |
| 322 * persistent handles, for instance from a Persistent<String> to a | 322 * persistent handles, for instance from a Persistent<String> to a |
| 323 * Persistent<Number> will cause a compiletime error. Assigning | 323 * Persistent<Number> will cause a compiletime error. Assigning |
| 324 * between compatible persistent handles, for instance assigning a | 324 * between compatible persistent handles, for instance assigning a |
| 325 * Persistent<String> to a variable declared as Persistent<Value>, | 325 * Persistent<String> to a variable declared as Persistent<Value>, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 346 | 346 |
| 347 template <class S> static inline Persistent<T> Cast(Persistent<S> that) { | 347 template <class S> static inline Persistent<T> Cast(Persistent<S> that) { |
| 348 if (that.IsEmpty()) return Persistent<T>(); | 348 if (that.IsEmpty()) return Persistent<T>(); |
| 349 return Persistent<T>(T::Cast(*that)); | 349 return Persistent<T>(T::Cast(*that)); |
| 350 } | 350 } |
| 351 | 351 |
| 352 /** | 352 /** |
| 353 * Creates a new persistent handle for an existing local or | 353 * Creates a new persistent handle for an existing local or |
| 354 * persistent handle. | 354 * persistent handle. |
| 355 */ | 355 */ |
| 356 static Persistent<T> New(Handle<T> that); | 356 inline static Persistent<T> New(Handle<T> that); |
| 357 | 357 |
| 358 /** | 358 /** |
| 359 * Releases the storage cell referenced by this persistent handle. | 359 * Releases the storage cell referenced by this persistent handle. |
| 360 * Does not remove the reference to the cell from any handles. | 360 * Does not remove the reference to the cell from any handles. |
| 361 * This handle's reference, and any any other references to the storage | 361 * This handle's reference, and any any other references to the storage |
| 362 * cell remain and IsEmpty will still return false. | 362 * cell remain and IsEmpty will still return false. |
| 363 */ | 363 */ |
| 364 void Dispose(); | 364 inline void Dispose(); |
| 365 | 365 |
| 366 /** | 366 /** |
| 367 * Make the reference to this object weak. When only weak handles | 367 * Make the reference to this object weak. When only weak handles |
| 368 * refer to the object, the garbage collector will perform a | 368 * refer to the object, the garbage collector will perform a |
| 369 * callback to the given V8::WeakReferenceCallback function, passing | 369 * callback to the given V8::WeakReferenceCallback function, passing |
| 370 * it the object reference and the given parameters. | 370 * it the object reference and the given parameters. |
| 371 */ | 371 */ |
| 372 void MakeWeak(void* parameters, WeakReferenceCallback callback); | 372 inline void MakeWeak(void* parameters, WeakReferenceCallback callback); |
| 373 | 373 |
| 374 /** Clears the weak reference to this object.*/ | 374 /** Clears the weak reference to this object.*/ |
| 375 void ClearWeak(); | 375 inline void ClearWeak(); |
| 376 | 376 |
| 377 /** | 377 /** |
| 378 *Checks if the handle holds the only reference to an object. | 378 *Checks if the handle holds the only reference to an object. |
| 379 */ | 379 */ |
| 380 bool IsNearDeath() const; | 380 inline bool IsNearDeath() const; |
| 381 | 381 |
| 382 /** | 382 /** |
| 383 * Returns true if the handle's reference is weak. | 383 * Returns true if the handle's reference is weak. |
| 384 */ | 384 */ |
| 385 bool IsWeak() const; | 385 inline bool IsWeak() const; |
| 386 | 386 |
| 387 private: | 387 private: |
| 388 friend class ImplementationUtilities; | 388 friend class ImplementationUtilities; |
| 389 friend class ObjectTemplate; | 389 friend class ObjectTemplate; |
| 390 }; | 390 }; |
| 391 | 391 |
| 392 | 392 |
| 393 /** | 393 /** |
| 394 * A stack-allocated class that governs a number of local handles. | 394 * A stack-allocated class that governs a number of local handles. |
| 395 * After a handle scope has been created, all local handles will be | 395 * After a handle scope has been created, all local handles will be |
| (...skipping 2222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2618 | 2618 |
| 2619 } // namespace v8 | 2619 } // namespace v8 |
| 2620 | 2620 |
| 2621 | 2621 |
| 2622 #undef V8EXPORT | 2622 #undef V8EXPORT |
| 2623 #undef V8EXPORT_INLINE | 2623 #undef V8EXPORT_INLINE |
| 2624 #undef TYPE_CHECK | 2624 #undef TYPE_CHECK |
| 2625 | 2625 |
| 2626 | 2626 |
| 2627 #endif // V8_H_ | 2627 #endif // V8_H_ |
| OLD | NEW |