| // Copyright (c) 2023, 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_BIN_FFI_TEST_FFI_TEST_FIELDS_H_ | |
| #define RUNTIME_BIN_FFI_TEST_FFI_TEST_FIELDS_H_ | |
| #include <stdint.h> | |
| #if defined(_WIN32) | |
| #define DART_EXPORT_FIELD __declspec(dllexport) | |
| #else | |
| #define DART_EXPORT_FIELD __attribute__((visibility("default"))) | |
| #endif | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| struct Coord { | |
| double x; | |
| double y; | |
| struct Coord* next; | |
| }; | |
| // These fields and structs are being accessed by @Native Dart variables in | |
| // tests, so they must be defined with C linkage to avoid name mangling. | |
| // MSVC doesn't seem to like extern "C" fields in C++ files, so the files are | |
| // moved into a separate C file. | |
| extern DART_EXPORT_FIELD int32_t globalInt; | |
| extern DART_EXPORT_FIELD struct Coord globalStruct; | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif // RUNTIME_BIN_FFI_TEST_FFI_TEST_FIELDS_H_ |