1 | // Copyright 2013 The Flutter Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | #ifndef LIB_TONIC_DART_BINDING_MACROS_H_ |
6 | #define LIB_TONIC_DART_BINDING_MACROS_H_ |
7 | |
8 | #include "tonic/dart_args.h" |
9 | |
10 | #define DART_NATIVE_NO_UI_CHECK_CALLBACK(CLASS, METHOD) \ |
11 | static void CLASS##_##METHOD(Dart_NativeArguments args) { \ |
12 | tonic::DartCall(&CLASS::METHOD, args); \ |
13 | } |
14 | |
15 | #define DART_NATIVE_CALLBACK(CLASS, METHOD) \ |
16 | static void CLASS##_##METHOD(Dart_NativeArguments args) { \ |
17 | UIDartState::ThrowIfUIOperationsProhibited(); \ |
18 | tonic::DartCall(&CLASS::METHOD, args); \ |
19 | } |
20 | |
21 | #define DART_NATIVE_CALLBACK_STATIC(CLASS, METHOD) \ |
22 | static void CLASS##_##METHOD(Dart_NativeArguments args) { \ |
23 | tonic::DartCallStatic(&CLASS::METHOD, args); \ |
24 | } |
25 | |
26 | #define DART_REGISTER_NATIVE(CLASS, METHOD) \ |
27 | {#CLASS "_" #METHOD, CLASS##_##METHOD, \ |
28 | tonic::IndicesForSignature<decltype(&CLASS::METHOD)>::count + 1, true}, |
29 | |
30 | #define DART_REGISTER_NATIVE_STATIC(CLASS, METHOD) \ |
31 | { \ |
32 | #CLASS "_" #METHOD, CLASS##_##METHOD, \ |
33 | tonic::IndicesForSignature < decltype(&CLASS::METHOD)> ::count, true \ |
34 | } |
35 | |
36 | #define DART_BIND_ALL(CLASS, FOR_EACH) \ |
37 | FOR_EACH(DART_NATIVE_CALLBACK) \ |
38 | void CLASS::RegisterNatives(tonic::DartLibraryNatives* natives) { \ |
39 | natives->Register({FOR_EACH(DART_REGISTER_NATIVE)}); \ |
40 | } |
41 | |
42 | #endif // LIB_TONIC_DART_BINDING_MACROS_H_ |
43 | |