// This file was GENERATED by command: // pump.py callback.h.pump // DO NOT EDIT BY HAND!!! // Copyright (c) 2014 GitHub, Inc. All rights reserved. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #include "base/bind.h" #include "base/callback.h" #include "native_mate/function_template.h" #include "native_mate/locker.h" #include "native_mate/scoped_persistent.h" namespace mate { namespace internal { typedef scoped_refptr > SafeV8Function; // This set of templates invokes a V8::Function by converting the C++ types. template struct V8FunctionInvoker; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle val(holder->Call(holder, 0, NULL)); Converter::FromV8(isolate, val, &ret); return ret; } }; template<> struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); holder->Call(holder, 0, NULL); } }; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function, P1 a1) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), }; v8::Handle val(holder->Call(holder, arraysize(args), args)); Converter::FromV8(isolate, val, &ret); return ret; } }; template struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function, P1 a1) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), }; holder->Call(holder, arraysize(args), args); } }; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), }; v8::Handle val(holder->Call(holder, arraysize(args), args)); Converter::FromV8(isolate, val, &ret); return ret; } }; template struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), }; holder->Call(holder, arraysize(args), args); } }; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), }; v8::Handle val(holder->Call(holder, arraysize(args), args)); Converter::FromV8(isolate, val, &ret); return ret; } }; template struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), }; holder->Call(holder, arraysize(args), args); } }; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3, P4 a4) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), ConvertToV8(isolate, a4), }; v8::Handle val(holder->Call(holder, arraysize(args), args)); Converter::FromV8(isolate, val, &ret); return ret; } }; template struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3, P4 a4) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), ConvertToV8(isolate, a4), }; holder->Call(holder, arraysize(args), args); } }; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3, P4 a4, P5 a5) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), ConvertToV8(isolate, a4), ConvertToV8(isolate, a5), }; v8::Handle val(holder->Call(holder, arraysize(args), args)); Converter::FromV8(isolate, val, &ret); return ret; } }; template struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3, P4 a4, P5 a5) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), ConvertToV8(isolate, a4), ConvertToV8(isolate, a5), }; holder->Call(holder, arraysize(args), args); } }; template struct V8FunctionInvoker { static R Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3, P4 a4, P5 a5, P6 a6) { R ret; Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), ConvertToV8(isolate, a4), ConvertToV8(isolate, a5), ConvertToV8(isolate, a6), }; v8::Handle val(holder->Call(holder, arraysize(args), args)); Converter::FromV8(isolate, val, &ret); return ret; } }; template struct V8FunctionInvoker { static void Go(v8::Isolate* isolate, SafeV8Function function, P1 a1, P2 a2, P3 a3, P4 a4, P5 a5, P6 a6) { Locker locker(isolate); MATE_HANDLE_SCOPE(isolate); v8::Handle holder = function->NewHandle(); v8::Handle args[] = { ConvertToV8(isolate, a1), ConvertToV8(isolate, a2), ConvertToV8(isolate, a3), ConvertToV8(isolate, a4), ConvertToV8(isolate, a5), ConvertToV8(isolate, a6), }; holder->Call(holder, arraysize(args), args); } }; } // namespace internal template struct Converter > { static v8::Handle ToV8(v8::Isolate* isolate, const base::Callback& val) { return CreateFunctionTemplate(isolate, val)->GetFunction(); } static bool FromV8(v8::Isolate* isolate, v8::Handle val, base::Callback* out) { if (!val->IsFunction()) return false; internal::SafeV8Function function( new RefCountedPersistent(isolate, val)); *out = base::Bind(&internal::V8FunctionInvoker::Go, isolate, function); return true; } }; } // namespace mate