Index: runtime/include/dart_api.h |
=================================================================== |
--- runtime/include/dart_api.h (revision 23447) |
+++ runtime/include/dart_api.h (working copy) |
@@ -1,6 +1,8 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
+/* |
+ * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+ * for details. All rights reserved. Use of this source code is governed by a |
+ * BSD-style license that can be found in the LICENSE file. |
+ */ |
#ifndef INCLUDE_DART_API_H_ |
#define INCLUDE_DART_API_H_ |
@@ -38,8 +40,8 @@ |
#define DART_EXPORT DART_EXTERN_C |
#endif |
#else |
-// __STDC_FORMAT_MACROS has to be defined before including <inttypes.h> to |
-// enable platform independent printf format specifiers. |
+/* __STDC_FORMAT_MACROS has to be defined before including <inttypes.h> to |
+ * enable platform independent printf format specifiers. */ |
#ifndef __STDC_FORMAT_MACROS |
#define __STDC_FORMAT_MACROS |
#endif |
@@ -58,7 +60,7 @@ |
#include <assert.h> |
-// --- Handles --- |
+/* --- Handles --- */ |
/** |
* An object reference managed by the Dart VM garbage collector. |
@@ -283,8 +285,8 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception); |
-// Deprecated. |
-// TODO(turnidge): Remove all uses and delete. |
+/* Deprecated. */ |
+/* TODO(turnidge): Remove all uses and delete. */ |
DART_EXPORT Dart_Handle Dart_Error(const char* format, ...); |
/** |
@@ -314,17 +316,17 @@ |
* error handle is returned. |
*/ |
DART_EXPORT Dart_Handle Dart_PropagateError(Dart_Handle handle); |
-// TODO(turnidge): Should this really return an error handle? |
-// Consider just terminating. |
+/* TODO(turnidge): Should this really return an error handle? */ |
+/* Consider just terminating. */ |
-// Internal routine used for reporting error handles. |
+/* Internal routine used for reporting error handles. */ |
DART_EXPORT void _Dart_ReportErrorHandle(const char* file, |
int line, |
const char* handle_string, |
const char* error); |
-// TODO(turnidge): Move DART_CHECK_VALID to some sort of dart_utils |
-// header instead of this header. |
+/* TODO(turnidge): Move DART_CHECK_VALID to some sort of dart_utils |
+ * header instead of this header. */ |
/** |
* Aborts the process if 'handle' is an error handle. |
* |
@@ -476,7 +478,7 @@ |
Dart_WeakPersistentHandle* values, |
intptr_t num_values); |
-// --- Garbage Collection Callbacks --- |
+/* --- Garbage Collection Callbacks --- */ |
/** |
* Callbacks signal the beginning and end of a garbage collection. |
@@ -546,7 +548,7 @@ |
DART_EXPORT Dart_Handle Dart_RemoveGcEpilogueCallback( |
Dart_GcEpilogueCallback callback); |
-// --- Initialization and Globals --- |
+/* --- Initialization and Globals --- */ |
/** |
* Gets the version string for the Dart VM. |
@@ -627,7 +629,7 @@ |
* unwound (currently unimplemented). |
*/ |
typedef bool (*Dart_IsolateInterruptCallback)(); |
-// TODO(turnidge): Define and implement unwinding. |
+/* TODO(turnidge): Define and implement unwinding. */ |
/** |
* An isolate unhandled exception callback function. |
@@ -737,7 +739,7 @@ |
*/ |
DART_EXPORT bool Dart_IsVMFlagSet(const char* flag_name); |
-// --- Isolates --- |
+/* --- Isolates --- */ |
/** |
* Creates a new isolate. The new isolate becomes the current isolate. |
@@ -767,8 +769,8 @@ |
const uint8_t* snapshot, |
void* callback_data, |
char** error); |
-// TODO(turnidge): Document behavior when there is already a current |
-// isolate. |
+/* TODO(turnidge): Document behavior when there is already a current |
+ * isolate. */ |
/** |
* Shuts down the current isolate. After this call, the current |
@@ -777,7 +779,7 @@ |
* Requires there to be a current isolate. |
*/ |
DART_EXPORT void Dart_ShutdownIsolate(); |
-// TODO(turnidge): Document behavior when there is no current isolate. |
+/* TODO(turnidge): Document behavior when there is no current isolate. */ |
/** |
* Returns the current isolate. Will return NULL if there is no |
@@ -806,9 +808,9 @@ |
* Requires there to be no current isolate. |
*/ |
DART_EXPORT void Dart_EnterIsolate(Dart_Isolate isolate); |
-// TODO(turnidge): Describe what happens if two threads attempt to |
-// enter the same isolate simultaneously. Check for this in the code. |
-// Describe whether isolates are allowed to migrate. |
+/* TODO(turnidge): Describe what happens if two threads attempt to |
+ * enter the same isolate simultaneously. Check for this in the code. |
+ * Describe whether isolates are allowed to migrate. */ |
/** |
* Exits an isolate. After this call, Dart_CurrentIsolate will |
@@ -817,8 +819,8 @@ |
* Requires there to be a current isolate. |
*/ |
DART_EXPORT void Dart_ExitIsolate(); |
-// TODO(turnidge): We don't want users of the api to be able to exit a |
-// "pure" dart isolate. Implement and document. |
+/* TODO(turnidge): We don't want users of the api to be able to exit a |
+ * "pure" dart isolate. Implement and document. */ |
/** |
* Creates a full snapshot of the current isolate heap. |
@@ -887,7 +889,7 @@ |
DART_EXPORT bool Dart_IsolateMakeRunnable(Dart_Isolate isolate); |
-// --- Messages and Ports --- |
+/* --- Messages and Ports --- */ |
/** |
* A port is used to send or receive inter-isolate messages |
@@ -921,8 +923,8 @@ |
*/ |
DART_EXPORT void Dart_SetMessageNotifyCallback( |
Dart_MessageNotifyCallback message_notify_callback); |
-// TODO(turnidge): Consider moving this to isolate creation so that it |
-// is impossible to mess up. |
+/* TODO(turnidge): Consider moving this to isolate creation so that it |
+ * is impossible to mess up. */ |
/** |
* Handles the next pending message for the current isolate. |
@@ -950,7 +952,7 @@ |
* error handle is returned. |
*/ |
DART_EXPORT Dart_Handle Dart_RunLoop(); |
-// TODO(turnidge): Should this be removed from the public api? |
+/* TODO(turnidge): Should this be removed from the public api? */ |
/** |
* Gets the main port id for the current isolate. |
@@ -977,141 +979,7 @@ |
*/ |
DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle object); |
-// --- Message sending/receiving from native code ---- |
- |
/** |
- * A Dart_CObject is used for representing Dart objects as native C |
- * data outside the Dart heap. These objects are totally detached from |
- * the Dart heap. Only a subset of the Dart objects have a |
- * representation as a Dart_CObject. |
- * |
- * The string encoding in the 'value.as_string' is UTF-8. |
- * |
- * All the different types from dart:typed_data are exposed as type |
- * kTypedData. The specific type from dart:typed_data is in the type |
- * field of the as_typed_data structure. The length in the |
- * as_typed_data structure is always in bytes. |
- */ |
-typedef struct _Dart_CObject { |
- enum Type { |
- kNull = 0, |
- kBool, |
- kInt32, |
- kInt64, |
- kBigint, |
- kDouble, |
- kString, |
- kArray, |
- kTypedData, |
- kExternalTypedData, |
- kUnsupported, |
- kNumberOfTypes |
- } type; |
- |
- enum TypedDataType { |
- kInt8Array = 0, |
- kUint8Array, |
- kUint8ClampedArray, |
- kInt16Array, |
- kUint16Array, |
- kInt32Array, |
- kUint32Array, |
- kInt64Array, |
- kUint64Array, |
- kFloat32Array, |
- kFloat64Array, |
- kNumberOfTypedDataTypes |
- }; |
- |
- union { |
- bool as_bool; |
- int32_t as_int32; |
- int64_t as_int64; |
- double as_double; |
- char* as_string; |
- char* as_bigint; |
- struct { |
- int length; |
- struct _Dart_CObject** values; |
- } as_array; |
- struct { |
- TypedDataType type; |
- int length; |
- uint8_t* values; |
- } as_typed_data; |
- struct { |
- TypedDataType type; |
- int length; |
- uint8_t* data; |
- void* peer; |
- Dart_WeakPersistentHandleFinalizer callback; |
- } as_external_typed_data; |
- } value; |
-} Dart_CObject; |
- |
-/** |
- * Posts a message on some port. The message will contain the |
- * Dart_CObject object graph rooted in 'message'. |
- * |
- * While the message is being sent the state of the graph of |
- * Dart_CObject structures rooted in 'message' should not be accessed, |
- * as the message generation will make temporary modifications to the |
- * data. When the message has been sent the graph will be fully |
- * restored. |
- * |
- * \param port_id The destination port. |
- * \param message The message to send. |
- * |
- * \return True if the message was posted. |
- */ |
-DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message); |
- |
-/** |
- * A native message handler. |
- * |
- * This handler is associated with a native port by calling |
- * Dart_NewNativePort. |
- * |
- * The message received is decoded into the message structure. The |
- * lifetime of the message data is controlled by the caller. All the |
- * data references from the message are allocated by the caller and |
- * will be reclaimed when returning to it. |
- */ |
- |
-typedef void (*Dart_NativeMessageHandler)(Dart_Port dest_port_id, |
- Dart_Port reply_port_id, |
- Dart_CObject* message); |
- |
-/** |
- * Creates a new native port. When messages are received on this |
- * native port, then they will be dispatched to the provided native |
- * message handler. |
- * |
- * \param name The name of this port in debugging messages. |
- * \param handler The C handler to run when messages arrive on the port. |
- * \param handle_concurrently Is it okay to process requests on this |
- * native port concurrently? |
- * |
- * \return If successful, returns the port id for the native port. In |
- * case of error, returns ILLEGAL_PORT. |
- */ |
-DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, |
- Dart_NativeMessageHandler handler, |
- bool handle_concurrently); |
-// TODO(turnidge): Currently handle_concurrently is ignored. |
- |
-/** |
- * Closes the native port with the given id. |
- * |
- * The port must have been allocated by a call to Dart_NewNativePort. |
- * |
- * \param native_port_id The id of the native port to close. |
- * |
- * \return Returns true if the port was closed successfully. |
- */ |
-DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id); |
- |
-/** |
* Returns a new SendPort with the provided port id. |
*/ |
DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id); |
@@ -1123,7 +991,7 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_GetReceivePort(Dart_Port port_id); |
-// --- Scopes ---- |
+/* --- Scopes ---- */ |
/** |
* Enters a new scope. |
@@ -1169,7 +1037,7 @@ |
*/ |
DART_EXPORT uint8_t* Dart_ScopeAllocate(intptr_t size); |
-// --- Objects ---- |
+/* --- Objects ---- */ |
/** |
* Returns the null object. |
@@ -1220,13 +1088,13 @@ |
Dart_Handle type, |
bool* instanceof); |
-// --- Instances ---- |
-// For the purposes of the embedding api, not all objects returned are |
-// Dart language objects. Within the api, we use the term 'Instance' |
-// to indicate handles which refer to true Dart language objects. |
-// |
-// TODO(turnidge): Reorganize the "Object" section above, pulling down |
-// any functions that more properly belong here. |
+/* --- Instances ---- |
+ * For the purposes of the embedding api, not all objects returned are |
+ * Dart language objects. Within the api, we use the term 'Instance' |
+ * to indicate handles which refer to true Dart language objects. |
+ * |
+ * TODO(turnidge): Reorganize the "Object" section above, pulling down |
+ * any functions that more properly belong here. */ |
/** |
* Does this handle refer to some Dart language object? |
@@ -1243,14 +1111,14 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_InstanceGetClass(Dart_Handle instance); |
-// --- Numbers ---- |
+/* --- Numbers ---- */ |
/** |
* Is this object a Number? |
*/ |
DART_EXPORT bool Dart_IsNumber(Dart_Handle object); |
-// --- Integers ---- |
+/* --- Integers ---- */ |
/** |
* Is this object an Integer? |
@@ -1340,7 +1208,7 @@ |
DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer, |
const char** value); |
-// --- Booleans ---- |
+/* --- Booleans ---- */ |
/** |
* Returns the True object. |
@@ -1385,7 +1253,7 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj, bool* value); |
-// --- Doubles --- |
+/* --- Doubles --- */ |
/** |
* Is this object a Double? |
@@ -1412,7 +1280,7 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj, double* value); |
-// --- Strings --- |
+/* --- Strings --- */ |
/** |
* Is this object a String? |
@@ -1446,8 +1314,8 @@ |
* an error handle. |
*/ |
DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str); |
-// TODO(turnidge): Document what happens when we run out of memory |
-// during this call. |
+/* TODO(turnidge): Document what happens when we run out of memory |
+ * during this call. */ |
/** |
* Returns a String built from an array of UTF-8 encoded characters. |
@@ -1639,7 +1507,7 @@ |
Dart_PeerFinalizer cback); |
-// --- Lists --- |
+/* --- Lists --- */ |
/** |
* Is this object a List? |
@@ -1717,23 +1585,23 @@ |
uint8_t* native_array, |
intptr_t length); |
-// --- Typed Data --- |
+/* --- Typed Data --- */ |
typedef enum { |
- kByteData = 0, |
- kInt8, |
- kUint8, |
- kUint8Clamped, |
- kInt16, |
- kUint16, |
- kInt32, |
- kUint32, |
- kInt64, |
- kUint64, |
- kFloat32, |
- kFloat64, |
- kFloat32x4, |
- kInvalid |
+ Dart_TypedData_kByteData = 0, |
+ Dart_TypedData_kInt8, |
+ Dart_TypedData_kUint8, |
+ Dart_TypedData_kUint8Clamped, |
+ Dart_TypedData_kInt16, |
+ Dart_TypedData_kUint16, |
+ Dart_TypedData_kInt32, |
+ Dart_TypedData_kUint32, |
+ Dart_TypedData_kInt64, |
+ Dart_TypedData_kUint64, |
+ Dart_TypedData_kFloat32, |
+ Dart_TypedData_kFloat64, |
+ Dart_TypedData_kFloat32x4, |
+ Dart_TypedData_kInvalid |
} Dart_TypedData_Type; |
/** |
@@ -1816,7 +1684,7 @@ |
DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object); |
-// --- Closures --- |
+/* --- Closures --- */ |
/** |
* Is this object a Closure? |
@@ -1844,7 +1712,7 @@ |
int number_of_arguments, |
Dart_Handle* arguments); |
-// --- Classes and Interfaces --- |
+/* --- Classes and Interfaces --- */ |
/** |
* Is this a class handle? |
@@ -1919,7 +1787,7 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_ClassGetFunctionTypeSignature(Dart_Handle clazz); |
-// --- Function and Variable Declarations --- |
+/* --- Function and Variable Declarations --- */ |
/** |
* Returns a list of the names of all functions or methods declared in |
@@ -2009,7 +1877,7 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_FunctionIsConstructor(Dart_Handle function, |
bool* is_constructor); |
-// TODO(turnidge): Document behavior for factory constructors too. |
+/* TODO(turnidge): Document behavior for factory constructors too. */ |
/** |
* Determines whether a function or method is a getter. |
@@ -2185,9 +2053,9 @@ |
* argument is not a valid handle. |
*/ |
DART_EXPORT Dart_Handle Dart_TypeVariableUpperBound(Dart_Handle type_variable); |
-// TODO(turnidge): Finish documentation. |
+/* TODO(turnidge): Finish documentation. */ |
-// --- Constructors, Methods, and Fields --- |
+/* --- Constructors, Methods, and Fields --- */ |
/** |
* Invokes a constructor, creating a new object. |
@@ -2237,7 +2105,7 @@ |
Dart_Handle name, |
int number_of_arguments, |
Dart_Handle* arguments); |
-// TODO(turnidge): Document how to invoke operators. |
+/* TODO(turnidge): Document how to invoke operators. */ |
/** |
* Gets the value of a field. |
@@ -2316,9 +2184,9 @@ |
int index, |
intptr_t value); |
-// --- Exceptions ---- |
-// TODO(turnidge): Remove these functions from the api and replace all |
-// uses with Dart_NewUnhandledExceptionError. |
+/* --- Exceptions ---- |
+ * TODO(turnidge): Remove these functions from the api and replace all |
+ * uses with Dart_NewUnhandledExceptionError. */ |
/** |
* Throws an exception. |
@@ -2351,7 +2219,7 @@ |
DART_EXPORT Dart_Handle Dart_RethrowException(Dart_Handle exception, |
Dart_Handle stacktrace); |
-// --- Native functions --- |
+/* --- Native functions --- */ |
/** |
* The arguments to a native function. |
@@ -2368,7 +2236,7 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, |
int index); |
-// TODO(turnidge): Specify the behavior of an out-of-bounds access. |
+/* TODO(turnidge): Specify the behavior of an out-of-bounds access. */ |
/** |
* Gets the number of native arguments. |
@@ -2398,20 +2266,20 @@ |
*/ |
typedef Dart_NativeFunction (*Dart_NativeEntryResolver)(Dart_Handle name, |
int num_of_arguments); |
-// TODO(turnidge): Consider renaming to NativeFunctionResolver or |
-// NativeResolver. |
+/* TODO(turnidge): Consider renaming to NativeFunctionResolver or |
+ * NativeResolver. */ |
-// --- Scripts and Libraries --- |
-// TODO(turnidge): Finish documenting this section. |
+/* --- Scripts and Libraries --- |
+ * TODO(turnidge): Finish documenting this section. */ |
typedef enum { |
- kLibraryTag = 0, |
- kImportTag, |
- kSourceTag, |
- kCanonicalizeUrl |
+ Dart_kLibraryTag = 0, |
+ Dart_kImportTag, |
+ Dart_kSourceTag, |
+ Dart_kCanonicalizeUrl |
} Dart_LibraryTag; |
-// TODO(turnidge): Document. |
+/* TODO(turnidge): Document. */ |
typedef Dart_Handle (*Dart_LibraryTagHandler)(Dart_LibraryTag tag, |
Dart_Handle library, |
Dart_Handle url); |
@@ -2502,8 +2370,8 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library, |
Dart_Handle class_name); |
-// TODO(turnidge): Consider returning Dart_Null() when the class is |
-// not found to distinguish that from a true error case. |
+/* TODO(turnidge): Consider returning Dart_Null() when the class is |
+ * not found to distinguish that from a true error case. */ |
/** |
* Returns the name of a library as declared in the #library directive. |
@@ -2525,8 +2393,8 @@ |
DART_EXPORT Dart_Handle Dart_LibraryGetClassNames(Dart_Handle library); |
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url); |
-// TODO(turnidge): Consider returning Dart_Null() when the library is |
-// not found to distinguish that from a true error case. |
+/* TODO(turnidge): Consider returning Dart_Null() when the library is |
+ * not found to distinguish that from a true error case. */ |
DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url, |
Dart_Handle source); |
@@ -2558,7 +2426,7 @@ |
DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library, |
Dart_Handle url, |
Dart_Handle source); |
-// TODO(turnidge): Rename to Dart_LibraryLoadSource? |
+/* TODO(turnidge): Rename to Dart_LibraryLoadSource? */ |
/** |
@@ -2583,20 +2451,20 @@ |
DART_EXPORT Dart_Handle Dart_SetNativeResolver( |
Dart_Handle library, |
Dart_NativeEntryResolver resolver); |
-// TODO(turnidge): Rename to Dart_LibrarySetNativeResolver? |
+/* TODO(turnidge): Rename to Dart_LibrarySetNativeResolver? */ |
-// --- Profiling support ---- |
+/* --- Profiling support ---- */ |
-// External pprof support for gathering and dumping symbolic |
-// information that can be used for better profile reports for |
-// dynamically generated code. |
+/* External pprof support for gathering and dumping symbolic |
+ * information that can be used for better profile reports for |
+ * dynamically generated code. */ |
DART_EXPORT void Dart_InitPprofSupport(); |
DART_EXPORT void Dart_GetPprofSymbolInfo(void** buffer, int* buffer_size); |
-// Support for generating symbol maps for use by the Linux perf tool. |
+/* Support for generating symbol maps for use by the Linux perf tool. */ |
DART_EXPORT void Dart_InitPerfEventsSupport(void* perf_events_file); |
-// --- Heap Profiler --- |
+/* --- Heap Profiler --- */ |
/** |
* Generates a heap profile. |
@@ -2611,7 +2479,7 @@ |
DART_EXPORT Dart_Handle Dart_HeapProfile(Dart_FileWriteCallback callback, |
void* stream); |
-// --- Peers --- |
+/* --- Peers --- */ |
/** |
* The peer field is a lazily allocated field intendend for storage of |
@@ -2644,4 +2512,124 @@ |
*/ |
DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer); |
-#endif // INCLUDE_DART_API_H_ |
+/* --- Message sending/receiving from native code ---- */ |
+ |
+/** |
+ * A Dart_CObject is used for representing Dart objects as native C |
+ * data outside the Dart heap. These objects are totally detached from |
+ * the Dart heap. Only a subset of the Dart objects have a |
+ * representation as a Dart_CObject. |
+ * |
+ * The string encoding in the 'value.as_string' is UTF-8. |
+ * |
+ * All the different types from dart:typed_data are exposed as type |
+ * kTypedData. The specific type from dart:typed_data is in the type |
+ * field of the as_typed_data structure. The length in the |
+ * as_typed_data structure is always in bytes. |
+ */ |
+typedef enum { |
+ Dart_CObject_kNull = 0, |
+ Dart_CObject_kBool, |
+ Dart_CObject_kInt32, |
+ Dart_CObject_kInt64, |
+ Dart_CObject_kBigint, |
+ Dart_CObject_kDouble, |
+ Dart_CObject_kString, |
+ Dart_CObject_kArray, |
+ Dart_CObject_kTypedData, |
+ Dart_CObject_kExternalTypedData, |
+ Dart_CObject_kUnsupported, |
+ Dart_CObject_kNumberOfTypes |
+} Dart_CObject_Type; |
+ |
+typedef struct _Dart_CObject { |
+ Dart_CObject_Type type; |
+ union { |
+ bool as_bool; |
+ int32_t as_int32; |
+ int64_t as_int64; |
+ double as_double; |
+ char* as_string; |
+ char* as_bigint; |
+ struct { |
+ int length; |
+ struct _Dart_CObject** values; |
+ } as_array; |
+ struct { |
+ Dart_TypedData_Type type; |
+ int length; |
+ uint8_t* values; |
+ } as_typed_data; |
+ struct { |
+ Dart_TypedData_Type type; |
+ int length; |
+ uint8_t* data; |
+ void* peer; |
+ Dart_WeakPersistentHandleFinalizer callback; |
+ } as_external_typed_data; |
+ } value; |
+} Dart_CObject; |
+ |
+/** |
+ * Posts a message on some port. The message will contain the |
+ * Dart_CObject object graph rooted in 'message'. |
+ * |
+ * While the message is being sent the state of the graph of |
+ * Dart_CObject structures rooted in 'message' should not be accessed, |
+ * as the message generation will make temporary modifications to the |
+ * data. When the message has been sent the graph will be fully |
+ * restored. |
+ * |
+ * \param port_id The destination port. |
+ * \param message The message to send. |
+ * |
+ * \return True if the message was posted. |
+ */ |
+DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message); |
+ |
+/** |
+ * A native message handler. |
+ * |
+ * This handler is associated with a native port by calling |
+ * Dart_NewNativePort. |
+ * |
+ * The message received is decoded into the message structure. The |
+ * lifetime of the message data is controlled by the caller. All the |
+ * data references from the message are allocated by the caller and |
+ * will be reclaimed when returning to it. |
+ */ |
+ |
+typedef void (*Dart_NativeMessageHandler)(Dart_Port dest_port_id, |
+Dart_Port reply_port_id, |
+Dart_CObject* message); |
+ |
+/** |
+ * Creates a new native port. When messages are received on this |
+ * native port, then they will be dispatched to the provided native |
+ * message handler. |
+ * |
+ * \param name The name of this port in debugging messages. |
+ * \param handler The C handler to run when messages arrive on the port. |
+ * \param handle_concurrently Is it okay to process requests on this |
+ * native port concurrently? |
+ * |
+ * \return If successful, returns the port id for the native port. In |
+ * case of error, returns ILLEGAL_PORT. |
+ */ |
+DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, |
+ Dart_NativeMessageHandler handler, |
+ bool handle_concurrently); |
+/* TODO(turnidge): Currently handle_concurrently is ignored. */ |
+ |
+/** |
+ * Closes the native port with the given id. |
+ * |
+ * The port must have been allocated by a call to Dart_NewNativePort. |
+ * |
+ * \param native_port_id The id of the native port to close. |
+ * |
+ * \return Returns true if the port was closed successfully. |
+ */ |
+DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id); |
+ |
+#endif /* INCLUDE_DART_API_H_ */ /* NOLINT */ |