mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 12:24:24 +00:00
9e4dc755cb
Closes https://github.com/dart-lang/sdk/pull/50921 GitOrigin-RevId: 6b1ca502b6722b0a987f33ace66f65cbd2c24e23 Change-Id: I74e4ff3c8e759c576036d6b791bd7734ebd215d8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/278536 Reviewed-by: Alexander Thomas <athom@google.com> Commit-Queue: Alexander Thomas <athom@google.com>
152 lines
7.9 KiB
C
152 lines
7.9 KiB
C
/*
|
|
* Copyright (c) 2020, 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 RUNTIME_INCLUDE_DART_API_DL_H_
|
|
#define RUNTIME_INCLUDE_DART_API_DL_H_
|
|
|
|
#include "dart_api.h" /* NOLINT */
|
|
#include "dart_native_api.h" /* NOLINT */
|
|
|
|
/** \mainpage Dynamically Linked Dart API
|
|
*
|
|
* This exposes a subset of symbols from dart_api.h and dart_native_api.h
|
|
* available in every Dart embedder through dynamic linking.
|
|
*
|
|
* All symbols are postfixed with _DL to indicate that they are dynamically
|
|
* linked and to prevent conflicts with the original symbol.
|
|
*
|
|
* Link `dart_api_dl.c` file into your library and invoke
|
|
* `Dart_InitializeApiDL` with `NativeApi.initializeApiDLData`.
|
|
*/
|
|
|
|
DART_EXPORT intptr_t Dart_InitializeApiDL(void* data);
|
|
|
|
// ============================================================================
|
|
// IMPORTANT! Never update these signatures without properly updating
|
|
// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION.
|
|
//
|
|
// Verbatim copy of `dart_native_api.h` and `dart_api.h` symbol names and types
|
|
// to trigger compile-time errors if the symbols in those files are updated
|
|
// without updating these.
|
|
//
|
|
// Function return and argument types, and typedefs are carbon copied. Structs
|
|
// are typechecked nominally in C/C++, so they are not copied, instead a
|
|
// comment is added to their definition.
|
|
typedef int64_t Dart_Port_DL;
|
|
|
|
typedef void (*Dart_NativeMessageHandler_DL)(Dart_Port_DL dest_port_id,
|
|
Dart_CObject* message);
|
|
|
|
// dart_native_api.h symbols can be called on any thread.
|
|
#define DART_NATIVE_API_DL_SYMBOLS(F) \
|
|
/***** dart_native_api.h *****/ \
|
|
/* Dart_Port */ \
|
|
F(Dart_PostCObject, bool, (Dart_Port_DL port_id, Dart_CObject * message)) \
|
|
F(Dart_PostInteger, bool, (Dart_Port_DL port_id, int64_t message)) \
|
|
F(Dart_NewNativePort, Dart_Port_DL, \
|
|
(const char* name, Dart_NativeMessageHandler_DL handler, \
|
|
bool handle_concurrently)) \
|
|
F(Dart_CloseNativePort, bool, (Dart_Port_DL native_port_id))
|
|
|
|
// dart_api.h symbols can only be called on Dart threads.
|
|
#define DART_API_DL_SYMBOLS(F) \
|
|
/***** dart_api.h *****/ \
|
|
/* Errors */ \
|
|
F(Dart_IsError, bool, (Dart_Handle handle)) \
|
|
F(Dart_IsApiError, bool, (Dart_Handle handle)) \
|
|
F(Dart_IsUnhandledExceptionError, bool, (Dart_Handle handle)) \
|
|
F(Dart_IsCompilationError, bool, (Dart_Handle handle)) \
|
|
F(Dart_IsFatalError, bool, (Dart_Handle handle)) \
|
|
F(Dart_GetError, const char*, (Dart_Handle handle)) \
|
|
F(Dart_ErrorHasException, bool, (Dart_Handle handle)) \
|
|
F(Dart_ErrorGetException, Dart_Handle, (Dart_Handle handle)) \
|
|
F(Dart_ErrorGetStackTrace, Dart_Handle, (Dart_Handle handle)) \
|
|
F(Dart_NewApiError, Dart_Handle, (const char* error)) \
|
|
F(Dart_NewCompilationError, Dart_Handle, (const char* error)) \
|
|
F(Dart_NewUnhandledExceptionError, Dart_Handle, (Dart_Handle exception)) \
|
|
F(Dart_PropagateError, void, (Dart_Handle handle)) \
|
|
/* Dart_Handle, Dart_PersistentHandle, Dart_WeakPersistentHandle */ \
|
|
F(Dart_HandleFromPersistent, Dart_Handle, (Dart_PersistentHandle object)) \
|
|
F(Dart_HandleFromWeakPersistent, Dart_Handle, \
|
|
(Dart_WeakPersistentHandle object)) \
|
|
F(Dart_NewPersistentHandle, Dart_PersistentHandle, (Dart_Handle object)) \
|
|
F(Dart_SetPersistentHandle, void, \
|
|
(Dart_PersistentHandle obj1, Dart_Handle obj2)) \
|
|
F(Dart_DeletePersistentHandle, void, (Dart_PersistentHandle object)) \
|
|
F(Dart_NewWeakPersistentHandle, Dart_WeakPersistentHandle, \
|
|
(Dart_Handle object, void* peer, intptr_t external_allocation_size, \
|
|
Dart_HandleFinalizer callback)) \
|
|
F(Dart_DeleteWeakPersistentHandle, void, (Dart_WeakPersistentHandle object)) \
|
|
F(Dart_UpdateExternalSize, void, \
|
|
(Dart_WeakPersistentHandle object, intptr_t external_allocation_size)) \
|
|
F(Dart_NewFinalizableHandle, Dart_FinalizableHandle, \
|
|
(Dart_Handle object, void* peer, intptr_t external_allocation_size, \
|
|
Dart_HandleFinalizer callback)) \
|
|
F(Dart_DeleteFinalizableHandle, void, \
|
|
(Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object)) \
|
|
F(Dart_UpdateFinalizableExternalSize, void, \
|
|
(Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object, \
|
|
intptr_t external_allocation_size)) \
|
|
/* Dart_Port */ \
|
|
F(Dart_Post, bool, (Dart_Port_DL port_id, Dart_Handle object)) \
|
|
F(Dart_NewSendPort, Dart_Handle, (Dart_Port_DL port_id)) \
|
|
F(Dart_SendPortGetId, Dart_Handle, \
|
|
(Dart_Handle port, Dart_Port_DL * port_id)) \
|
|
/* Scopes */ \
|
|
F(Dart_EnterScope, void, (void)) \
|
|
F(Dart_ExitScope, void, (void)) \
|
|
/* Objects */ \
|
|
F(Dart_IsNull, bool, (Dart_Handle))
|
|
|
|
#define DART_API_ALL_DL_SYMBOLS(F) \
|
|
DART_NATIVE_API_DL_SYMBOLS(F) \
|
|
DART_API_DL_SYMBOLS(F)
|
|
// IMPORTANT! Never update these signatures without properly updating
|
|
// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION.
|
|
//
|
|
// End of verbatim copy.
|
|
// ============================================================================
|
|
|
|
// Copy of definition of DART_EXPORT without 'used' attribute.
|
|
//
|
|
// The 'used' attribute cannot be used with DART_API_ALL_DL_SYMBOLS because
|
|
// they are not function declarations, but variable declarations with a
|
|
// function pointer type.
|
|
//
|
|
// The function pointer variables are initialized with the addresses of the
|
|
// functions in the VM. If we were to use function declarations instead, we
|
|
// would need to forward the call to the VM adding indirection.
|
|
#if defined(__CYGWIN__)
|
|
#error Tool chain and platform not supported.
|
|
#elif defined(_WIN32)
|
|
#if defined(DART_SHARED_LIB)
|
|
#define DART_EXPORT_DL DART_EXTERN_C __declspec(dllexport)
|
|
#else
|
|
#define DART_EXPORT_DL DART_EXTERN_C
|
|
#endif
|
|
#else
|
|
#if __GNUC__ >= 4
|
|
#if defined(DART_SHARED_LIB)
|
|
#define DART_EXPORT_DL DART_EXTERN_C __attribute__((visibility("default")))
|
|
#else
|
|
#define DART_EXPORT_DL DART_EXTERN_C
|
|
#endif
|
|
#else
|
|
#error Tool chain not supported.
|
|
#endif
|
|
#endif
|
|
|
|
#define DART_API_DL_DECLARATIONS(name, R, A) \
|
|
typedef R(*name##_Type) A; \
|
|
DART_EXPORT_DL name##_Type name##_DL;
|
|
|
|
DART_API_ALL_DL_SYMBOLS(DART_API_DL_DECLARATIONS)
|
|
|
|
#undef DART_API_DL_DECLARATIONS
|
|
|
|
#undef DART_EXPORT_DL
|
|
|
|
#endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */
|