提交 3fc6351a 编写于 作者: J Jason Simmons

Merge pull request #2219 from jason-simmons/tonic_static_wrapper

Add Tonic macros for dispatching to static methods
......@@ -16,8 +16,8 @@ namespace blink {
class DartArgIterator {
public:
explicit DartArgIterator(Dart_NativeArguments args)
: args_(args), index_(1), had_exception_(false) { }
DartArgIterator(Dart_NativeArguments args, int start_index = 1)
: args_(args), index_(start_index), had_exception_(false) { }
template<typename T>
T GetNext() {
......@@ -165,6 +165,16 @@ void DartCall(Sig func, Dart_NativeArguments args) {
decoder.Dispatch(func);
}
template<typename Sig>
void DartCallStatic(Sig func, Dart_NativeArguments args) {
DartArgIterator it(args, 0);
using Indices = typename IndicesForSignature<Sig>::type;
DartDispatcher<Indices, Sig> decoder(&it);
if (it.had_exception())
return;
DartReturn(decoder.Dispatch(func), args);
}
template<typename Sig>
void DartCallConstructor(Sig func, Dart_NativeArguments args) {
DartArgIterator it(args);
......
......@@ -12,10 +12,19 @@
DartCall(&CLASS::METHOD, args); \
}
#define DART_NATIVE_CALLBACK_STATIC(CLASS, METHOD) \
static void CLASS_##METHOD(Dart_NativeArguments args) { \
DartCallStatic(&CLASS::METHOD, args); \
}
#define DART_REGISTER_NATIVE(CLASS, METHOD) \
{ #CLASS "_" #METHOD, CLASS_##METHOD, \
IndicesForSignature<decltype(&CLASS::METHOD)>::count + 1, true },
#define DART_REGISTER_NATIVE_STATIC(CLASS, METHOD) \
{ #CLASS "_" #METHOD, CLASS_##METHOD, \
IndicesForSignature<decltype(&CLASS::METHOD)>::count, true },
#define DART_BIND_ALL(CLASS, FOR_EACH) \
FOR_EACH(DART_NATIVE_CALLBACK) \
void CLASS::RegisterNatives(DartLibraryNatives* natives) { \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册