mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 15:01:30 +00:00
5d872a8737
https://github.com/dart-lang/sdk/issues/52568 TEST=new test added. Change-Id: I4f4b6b607fa2e0daa14fc25e3bdf99214f6ccb6b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/314900 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Siva Annamalai <asiva@google.com>
79 lines
2.9 KiB
C
79 lines
2.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.
|
|
*/
|
|
|
|
#include "dart_api_dl.h" /* NOLINT */
|
|
#include "dart_version.h" /* NOLINT */
|
|
#include "internal/dart_api_dl_impl.h" /* NOLINT */
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#define DART_API_DL_DEFINITIONS(name, R, A) name##_Type name##_DL = NULL;
|
|
|
|
DART_API_ALL_DL_SYMBOLS(DART_API_DL_DEFINITIONS)
|
|
DART_API_DEPRECATED_DL_SYMBOLS(DART_API_DL_DEFINITIONS)
|
|
|
|
#undef DART_API_DL_DEFINITIONS
|
|
|
|
typedef void* DartApiEntry_function;
|
|
|
|
DartApiEntry_function FindFunctionPointer(const DartApiEntry* entries,
|
|
const char* name) {
|
|
while (entries->name != NULL) {
|
|
if (strcmp(entries->name, name) == 0) return entries->function;
|
|
entries++;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
DART_EXPORT void Dart_UpdateExternalSize_Deprecated(
|
|
Dart_WeakPersistentHandle object, intptr_t external_size) {
|
|
printf("Dart_UpdateExternalSize is a nop, it has been deprecated\n");
|
|
}
|
|
|
|
DART_EXPORT void Dart_UpdateFinalizableExternalSize_Deprecated(
|
|
Dart_FinalizableHandle object,
|
|
Dart_Handle strong_ref_to_object,
|
|
intptr_t external_allocation_size) {
|
|
printf("Dart_UpdateFinalizableExternalSize is a nop, "
|
|
"it has been deprecated\n");
|
|
}
|
|
|
|
intptr_t Dart_InitializeApiDL(void* data) {
|
|
DartApi* dart_api_data = (DartApi*)data;
|
|
|
|
if (dart_api_data->major != DART_API_DL_MAJOR_VERSION) {
|
|
// If the DartVM we're running on does not have the same version as this
|
|
// file was compiled against, refuse to initialize. The symbols are not
|
|
// compatible.
|
|
return -1;
|
|
}
|
|
// Minor versions are allowed to be different.
|
|
// If the DartVM has a higher minor version, it will provide more symbols
|
|
// than we initialize here.
|
|
// If the DartVM has a lower minor version, it will not provide all symbols.
|
|
// In that case, we leave the missing symbols un-initialized. Those symbols
|
|
// should not be used by the Dart and native code. The client is responsible
|
|
// for checking the minor version number himself based on which symbols it
|
|
// is using.
|
|
// (If we would error out on this case, recompiling native code against a
|
|
// newer SDK would break all uses on older SDKs, which is too strict.)
|
|
|
|
const DartApiEntry* dart_api_function_pointers = dart_api_data->functions;
|
|
|
|
#define DART_API_DL_INIT(name, R, A) \
|
|
name##_DL = \
|
|
(name##_Type)(FindFunctionPointer(dart_api_function_pointers, #name));
|
|
DART_API_ALL_DL_SYMBOLS(DART_API_DL_INIT)
|
|
#undef DART_API_DL_INIT
|
|
|
|
#define DART_API_DEPRECATED_DL_INIT(name, R, A) \
|
|
name##_DL = name##_Deprecated;
|
|
DART_API_DEPRECATED_DL_SYMBOLS(DART_API_DEPRECATED_DL_INIT)
|
|
#undef DART_API_DEPRECATED_DL_INIT
|
|
|
|
return 0;
|
|
}
|