// This file was GENERATED by command: // pump.py constructor.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE.chromium file. #ifndef NATIVE_MATE_WRAPPABLE_CLASS_H_ #define NATIVE_MATE_WRAPPABLE_CLASS_H_ #include "base/bind.h" #include "native_mate/function_template.h" namespace mate { namespace internal { // This set of templates invokes a base::Callback by converting the Arguments // into native types. It relies on the function_template.h to provide helper // templates. inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*()>& callback) { return callback.Run(); }; template<typename P1> inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*(P1)>& callback) { typename CallbackParamTraits<P1>::LocalType a1; if (!GetNextArgument(args, 0, true, &a1)) return nullptr; return callback.Run(a1); }; template<typename P1, typename P2> inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*(P1, P2)>& callback) { typename CallbackParamTraits<P1>::LocalType a1; typename CallbackParamTraits<P2>::LocalType a2; if (!GetNextArgument(args, 0, true, &a1) || !GetNextArgument(args, 0, false, &a2)) return nullptr; return callback.Run(a1, a2); }; template<typename P1, typename P2, typename P3> inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*(P1, P2, P3)>& callback) { typename CallbackParamTraits<P1>::LocalType a1; typename CallbackParamTraits<P2>::LocalType a2; typename CallbackParamTraits<P3>::LocalType a3; if (!GetNextArgument(args, 0, true, &a1) || !GetNextArgument(args, 0, false, &a2) || !GetNextArgument(args, 0, false, &a3)) return nullptr; return callback.Run(a1, a2, a3); }; template<typename P1, typename P2, typename P3, typename P4> inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*(P1, P2, P3, P4)>& callback) { typename CallbackParamTraits<P1>::LocalType a1; typename CallbackParamTraits<P2>::LocalType a2; typename CallbackParamTraits<P3>::LocalType a3; typename CallbackParamTraits<P4>::LocalType a4; if (!GetNextArgument(args, 0, true, &a1) || !GetNextArgument(args, 0, false, &a2) || !GetNextArgument(args, 0, false, &a3) || !GetNextArgument(args, 0, false, &a4)) return nullptr; return callback.Run(a1, a2, a3, a4); }; template<typename P1, typename P2, typename P3, typename P4, typename P5> inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*(P1, P2, P3, P4, P5)>& callback) { typename CallbackParamTraits<P1>::LocalType a1; typename CallbackParamTraits<P2>::LocalType a2; typename CallbackParamTraits<P3>::LocalType a3; typename CallbackParamTraits<P4>::LocalType a4; typename CallbackParamTraits<P5>::LocalType a5; if (!GetNextArgument(args, 0, true, &a1) || !GetNextArgument(args, 0, false, &a2) || !GetNextArgument(args, 0, false, &a3) || !GetNextArgument(args, 0, false, &a4) || !GetNextArgument(args, 0, false, &a5)) return nullptr; return callback.Run(a1, a2, a3, a4, a5); }; template<typename P1, typename P2, typename P3, typename P4, typename P5, typename P6> inline WrappableBase* InvokeFactory( Arguments* args, const base::Callback<WrappableBase*(P1, P2, P3, P4, P5, P6)>& callback) { typename CallbackParamTraits<P1>::LocalType a1; typename CallbackParamTraits<P2>::LocalType a2; typename CallbackParamTraits<P3>::LocalType a3; typename CallbackParamTraits<P4>::LocalType a4; typename CallbackParamTraits<P5>::LocalType a5; typename CallbackParamTraits<P6>::LocalType a6; if (!GetNextArgument(args, 0, true, &a1) || !GetNextArgument(args, 0, false, &a2) || !GetNextArgument(args, 0, false, &a3) || !GetNextArgument(args, 0, false, &a4) || !GetNextArgument(args, 0, false, &a5) || !GetNextArgument(args, 0, false, &a6)) return nullptr; return callback.Run(a1, a2, a3, a4, a5, a6); }; template<typename Sig> MATE_METHOD_RETURN_TYPE InvokeNew(const base::Callback<Sig>& factory, v8::Isolate* isolate, Arguments* args) { if (!args->IsConstructCall()) { args->ThrowError("Requires constructor call"); MATE_METHOD_RETURN_UNDEFINED(); } WrappableBase* object; { // Don't continue if the constructor throws an exception. v8::TryCatch try_catch; object = internal::InvokeFactory(args, factory); if (try_catch.HasCaught()) { try_catch.ReThrow(); MATE_METHOD_RETURN_UNDEFINED(); } } if (!object) args->ThrowError(); MATE_METHOD_RETURN_UNDEFINED(); } } // namespace internal } // namespace mate #endif // NATIVE_MATE_WRAPPABLE_CLASS_H_