mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 14:53:37 +00:00
4a0782918e
Such that the files can be included more easily. Change-Id: I3129b35393eaf41f90e59a530b752846085bf93e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/164163 Auto-Submit: Daco Harkes <dacoharkes@google.com> Reviewed-by: Jonas Jensen <jonasfj@google.com>
60 lines
2.2 KiB
C
60 lines
2.2 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 <string.h>
|
|
|
|
#define DART_API_DL_DEFINITIONS(name, R, A) name##_Type name##_DL = NULL;
|
|
|
|
DART_API_ALL_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;
|
|
}
|
|
|
|
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
|
|
|
|
return 0;
|
|
}
|