OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef INCLUDE_DART_API_H_ | 5 #ifndef INCLUDE_DART_API_H_ |
6 #define INCLUDE_DART_API_H_ | 6 #define INCLUDE_DART_API_H_ |
7 | 7 |
8 /** \mainpage Dart Embedding API Reference | 8 /** \mainpage Dart Embedding API Reference |
9 * | 9 * |
10 * Dart is a class-based programming language for creating structured | 10 * Dart is a class-based programming language for creating structured |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
169 * Dart_EnterScope) and go away when the current scope exits. Unless | 169 * Dart_EnterScope) and go away when the current scope exits. Unless |
170 * otherwise indicated, callers should assume that all functions in | 170 * otherwise indicated, callers should assume that all functions in |
171 * the Dart embedding api return local handles. | 171 * the Dart embedding api return local handles. |
172 * | 172 * |
173 * Persistent handles are allocated within the current isolate. They | 173 * Persistent handles are allocated within the current isolate. They |
174 * can be used to store objects across scopes. Persistent handles have | 174 * can be used to store objects across scopes. Persistent handles have |
175 * the lifetime of the current isolate unless they are explicitly | 175 * the lifetime of the current isolate unless they are explicitly |
176 * deallocated (see Dart_DeletePersistentHandle). | 176 * deallocated (see Dart_DeletePersistentHandle). |
177 */ | 177 */ |
178 typedef struct _Dart_Handle* Dart_Handle; | 178 typedef struct _Dart_Handle* Dart_Handle; |
179 typedef struct _Dart_PersistentHandle* Dart_PersistentHandle; | |
180 typedef struct _Dart_WeakPersistentHandle* Dart_WeakPersistentHandle; | |
179 | 181 |
180 typedef void (*Dart_WeakPersistentHandleFinalizer)(Dart_Handle handle, | 182 typedef void (*Dart_WeakPersistentHandleFinalizer)( |
181 void* peer); | 183 Dart_WeakPersistentHandle handle, |
184 void* peer); | |
182 typedef void (*Dart_PeerFinalizer)(void* peer); | 185 typedef void (*Dart_PeerFinalizer)(void* peer); |
183 | 186 |
184 /** | 187 /** |
185 * Is this an error handle? | 188 * Is this an error handle? |
186 * | 189 * |
187 * Requires there to be a current isolate. | 190 * Requires there to be a current isolate. |
188 */ | 191 */ |
189 DART_EXPORT bool Dart_IsError(Dart_Handle handle); | 192 DART_EXPORT bool Dart_IsError(Dart_Handle handle); |
190 | 193 |
191 /** | 194 /** |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
354 * This is equivalent to using the triple-equals (===) operator. | 357 * This is equivalent to using the triple-equals (===) operator. |
355 * | 358 * |
356 * \param obj1 An object to be compared. | 359 * \param obj1 An object to be compared. |
357 * \param obj2 An object to be compared. | 360 * \param obj2 An object to be compared. |
358 * | 361 * |
359 * \return True if the objects are identically equal. False otherwise. | 362 * \return True if the objects are identically equal. False otherwise. |
360 */ | 363 */ |
361 DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2); | 364 DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2); |
362 | 365 |
363 /** | 366 /** |
367 * Allocates a handle in the current scope from a persistent handle. | |
368 */ | |
369 DART_EXPORT Dart_Handle Dart_HandleFromPersistent(Dart_PersistentHandle object); | |
370 | |
371 /** | |
372 * Allocates a handle in the current scope from a weak persistent handle. | |
373 */ | |
374 DART_EXPORT Dart_Handle Dart_HandleFromWeakPersistent( | |
375 Dart_WeakPersistentHandle object); | |
376 | |
377 /** | |
364 * Allocates a persistent handle for an object. | 378 * Allocates a persistent handle for an object. |
365 * | 379 * |
366 * This handle has the lifetime of the current isolate unless it is | 380 * This handle has the lifetime of the current isolate unless it is |
367 * explicitly deallocated by calling Dart_DeletePersistentHandle. | 381 * explicitly deallocated by calling Dart_DeletePersistentHandle. |
368 * | 382 * |
369 * Requires there to be a current isolate. | 383 * Requires there to be a current isolate. |
370 */ | 384 */ |
371 DART_EXPORT Dart_Handle Dart_NewPersistentHandle(Dart_Handle object); | 385 DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object); |
372 | 386 |
373 /** | 387 /** |
374 * Deallocates a persistent handle. | 388 * Deallocates a persistent handle. |
375 * | 389 * |
376 * Requires there to be a current isolate. | 390 * Requires there to be a current isolate. |
377 */ | 391 */ |
378 DART_EXPORT void Dart_DeletePersistentHandle(Dart_Handle object); | 392 DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object); |
379 | 393 |
380 /** | 394 /** |
381 * Allocates a weak persistent handle for an object. | 395 * Allocates a weak persistent handle for an object. |
382 * | 396 * |
383 * This handle has the lifetime of the current isolate unless it is | 397 * This handle has the lifetime of the current isolate unless it is |
384 * explicitly deallocated by calling Dart_DeletePersistentHandle. | 398 * explicitly deallocated by calling Dart_DeletePersistentHandle. |
385 * | 399 * |
386 * Requires there to be a current isolate. | 400 * Requires there to be a current isolate. |
387 * | 401 * |
388 * \param object An object. | 402 * \param object An object. |
389 * \param peer A pointer to a native object or NULL. This value is | 403 * \param peer A pointer to a native object or NULL. This value is |
390 * provided to callback when it is invoked. | 404 * provided to callback when it is invoked. |
391 * \param callback A function pointer that will be invoked sometime | 405 * \param callback A function pointer that will be invoked sometime |
392 * after the object is garbage collected. | 406 * after the object is garbage collected. |
393 * | 407 * |
394 * \return Success if the weak persistent handle was | 408 * \return Success if the weak persistent handle was |
395 * created. Otherwise, returns an error. | 409 * created. Otherwise, returns an error. |
396 */ | 410 */ |
397 DART_EXPORT Dart_Handle Dart_NewWeakPersistentHandle( | 411 DART_EXPORT Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle( |
398 Dart_Handle object, | 412 Dart_Handle object, |
399 void* peer, | 413 void* peer, |
400 Dart_WeakPersistentHandleFinalizer callback); | 414 Dart_WeakPersistentHandleFinalizer callback); |
401 | 415 |
402 /** | 416 DART_EXPORT void Dart_DeleteWeakPersistentHandle(Dart_WeakPersistentHandle objec t); |
403 * Is this object a weak persistent handle? | |
404 * | |
405 * Requires there to be a current isolate. | |
406 */ | |
407 DART_EXPORT bool Dart_IsWeakPersistentHandle(Dart_Handle object); | |
408 | 417 |
409 /** | 418 /** |
410 * Allocates a prologue weak persistent handle for an object. | 419 * Allocates a prologue weak persistent handle for an object. |
411 * | 420 * |
412 * Prologue weak persistent handles are similar to weak persistent | 421 * Prologue weak persistent handles are similar to weak persistent |
413 * handles but exhibit different behavior during garbage collections | 422 * handles but exhibit different behavior during garbage collections |
414 * that invoke the prologue and epilogue callbacks. While weak | 423 * that invoke the prologue and epilogue callbacks. While weak |
415 * persistent handles always weakly reference their referents, | 424 * persistent handles always weakly reference their referents, |
416 * prologue weak persistent handles weakly reference their referents | 425 * prologue weak persistent handles weakly reference their referents |
417 * only during a garbage collection that invokes the prologue and | 426 * only during a garbage collection that invokes the prologue and |
418 * epilogue callbacks. During all other garbage collections, prologue | 427 * epilogue callbacks. During all other garbage collections, prologue |
419 * weak persistent handles strongly reference their referents. | 428 * weak persistent handles strongly reference their referents. |
420 * | 429 * |
421 * This handle has the lifetime of the current isolate unless it is | 430 * This handle has the lifetime of the current isolate unless it is |
422 * explicitly deallocated by calling Dart_DeletePersistentHandle. | 431 * explicitly deallocated by calling Dart_DeletePersistentHandle. |
423 * | 432 * |
424 * Requires there to be a current isolate. | 433 * Requires there to be a current isolate. |
425 * | 434 * |
426 * \param object An object. | 435 * \param object An object. |
427 * \param peer A pointer to a native object or NULL. This value is | 436 * \param peer A pointer to a native object or NULL. This value is |
428 * provided to callback when it is invoked. | 437 * provided to callback when it is invoked. |
429 * \param callback A function pointer that will be invoked sometime | 438 * \param callback A function pointer that will be invoked sometime |
430 * after the object is garbage collected. | 439 * after the object is garbage collected. |
431 * | 440 * |
432 * \return Success if the prologue weak persistent handle was created. | 441 * \return Success if the prologue weak persistent handle was created. |
433 * Otherwise, returns an error. | 442 * Otherwise, returns an error. |
434 */ | 443 */ |
435 DART_EXPORT Dart_Handle Dart_NewPrologueWeakPersistentHandle( | 444 DART_EXPORT Dart_WeakPersistentHandle Dart_NewPrologueWeakPersistentHandle( |
436 Dart_Handle object, | 445 Dart_Handle object, |
437 void* peer, | 446 void* peer, |
438 Dart_WeakPersistentHandleFinalizer callback); | 447 Dart_WeakPersistentHandleFinalizer callback); |
439 | 448 |
440 /** | 449 /** |
441 * Is this object a prologue weak persistent handle? | 450 * Is this object a prologue weak persistent handle? |
442 * | 451 * |
443 * Requires there to be a current isolate. | 452 * Requires there to be a current isolate. |
444 */ | 453 */ |
445 DART_EXPORT bool Dart_IsPrologueWeakPersistentHandle(Dart_Handle object); | 454 DART_EXPORT bool Dart_IsPrologueWeakPersistentHandle( |
455 Dart_WeakPersistentHandle object); | |
446 | 456 |
447 /** | 457 /** |
448 * Constructs a set of weak references from the Cartesian product of | 458 * Constructs a set of weak references from the Cartesian product of |
449 * the objects in the key set and the objects in values set. | 459 * the objects in the key set and the objects in values set. |
450 * | 460 * |
451 * \param keys A set of object references. These references will be | 461 * \param keys A set of object references. These references will be |
452 * considered weak by the garbage collector. | 462 * considered weak by the garbage collector. |
453 * \param num_keys the number of objects in the keys set. | 463 * \param num_keys the number of objects in the keys set. |
454 * \param values A set of object references. These references will be | 464 * \param values A set of object references. These references will be |
455 * considered weak by garbage collector unless any object reference | 465 * considered weak by garbage collector unless any object reference |
456 * in 'keys' is found to be strong. | 466 * in 'keys' is found to be strong. |
457 * \param num_values the size of the values set | 467 * \param num_values the size of the values set |
458 * | 468 * |
459 * \return Success if the weak reference set could be created. | 469 * \return Success if the weak reference set could be created. |
460 * Otherwise, returns an error handle. | 470 * Otherwise, returns an error handle. |
461 */ | 471 */ |
462 DART_EXPORT Dart_Handle Dart_NewWeakReferenceSet(Dart_Handle* keys, | 472 DART_EXPORT Dart_Handle Dart_NewWeakReferenceSet( |
463 intptr_t num_keys, | 473 Dart_WeakPersistentHandle* keys, |
Anton Muhin
2013/05/27 15:45:49
there was one fancy trick in our code which curren
Ivan Posva
2013/05/28 21:12:20
I am not sure I understand your usage of this API
Anton Muhin
2013/05/29 07:43:13
Yes, that's exactly what we do: weak persistent ha
| |
464 Dart_Handle* values, | 474 intptr_t num_keys, |
465 intptr_t num_values); | 475 Dart_WeakPersistentHandle* values, |
476 intptr_t num_values); | |
466 | 477 |
467 // --- Garbage Collection Callbacks --- | 478 // --- Garbage Collection Callbacks --- |
468 | 479 |
469 /** | 480 /** |
470 * Callbacks signal the beginning and end of a garbage collection. | 481 * Callbacks signal the beginning and end of a garbage collection. |
471 * | 482 * |
472 * These signals are intended to be used by the embedder to manage the | 483 * These signals are intended to be used by the embedder to manage the |
473 * lifetime of native objects with a managed object peer. | 484 * lifetime of native objects with a managed object peer. |
474 */ | 485 */ |
475 | 486 |
(...skipping 1283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1759 * \param type The type of the data array. | 1770 * \param type The type of the data array. |
1760 * \param value A data array. This array must not move. | 1771 * \param value A data array. This array must not move. |
1761 * \param length The length of the data array (length in type units). | 1772 * \param length The length of the data array (length in type units). |
1762 * \param peer An external pointer to associate with this array. | 1773 * \param peer An external pointer to associate with this array. |
1763 * | 1774 * |
1764 * \return The TypedData object if no error occurs. Otherwise returns | 1775 * \return The TypedData object if no error occurs. Otherwise returns |
1765 * an error handle. The TypedData object is returned in a | 1776 * an error handle. The TypedData object is returned in a |
1766 * WeakPersistentHandle which needs to be deleted in the specified callback | 1777 * WeakPersistentHandle which needs to be deleted in the specified callback |
1767 * using Dart_DeletePersistentHandle. | 1778 * using Dart_DeletePersistentHandle. |
1768 */ | 1779 */ |
1769 DART_EXPORT Dart_Handle Dart_NewExternalTypedData( | 1780 DART_EXPORT Dart_Handle Dart_NewExternalTypedData(Dart_TypedData_Type type, |
1770 Dart_TypedData_Type type, | 1781 void* data, |
1771 void* data, | 1782 intptr_t length); |
1772 intptr_t length, | |
1773 void* peer, | |
1774 Dart_WeakPersistentHandleFinalizer callback); | |
1775 | |
1776 /** | |
1777 * Retrieves the peer pointer associated with an external TypedData object. | |
1778 */ | |
1779 DART_EXPORT Dart_Handle Dart_ExternalTypedDataGetPeer(Dart_Handle object, | |
Anton Muhin
2013/05/27 15:45:49
there still should be a way to fetch peer object a
Ivan Posva
2013/05/28 21:12:20
For now, please use Dart_SetPeer and Dart_GetPeer
| |
1780 void** peer); | |
1781 | 1783 |
1782 /** | 1784 /** |
1783 * Acquires access to the internal data address of a TypedData object. | 1785 * Acquires access to the internal data address of a TypedData object. |
1784 * | 1786 * |
1785 * \param object The typed data object whose internal data address is to | 1787 * \param object The typed data object whose internal data address is to |
1786 * be accessed. | 1788 * be accessed. |
1787 * \param type The type of the object is returned here. | 1789 * \param type The type of the object is returned here. |
1788 * \param data The internal data address is returned here. | 1790 * \param data The internal data address is returned here. |
1789 * \param len Size of the typed array is returned here. | 1791 * \param len Size of the typed array is returned here. |
1790 * | 1792 * |
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2635 * | 2637 * |
2636 * \param object An object. | 2638 * \param object An object. |
2637 * \param peer A value to store in the peer field. | 2639 * \param peer A value to store in the peer field. |
2638 * | 2640 * |
2639 * \return Returns an error if 'object' is a subtype of Null, num, or | 2641 * \return Returns an error if 'object' is a subtype of Null, num, or |
2640 * bool. | 2642 * bool. |
2641 */ | 2643 */ |
2642 DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer); | 2644 DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer); |
2643 | 2645 |
2644 #endif // INCLUDE_DART_API_H_ | 2646 #endif // INCLUDE_DART_API_H_ |
OLD | NEW |