@@ -31,6 +31,11 @@ namespace internal {
31
31
template <typename WrapperType>
32
32
val wrapped_extend (const std::string&, const val&);
33
33
34
+ enum class EM_METHOD_CALLER_KIND {
35
+ FUNCTION = 0 ,
36
+ CONSTRUCTOR = 1 ,
37
+ };
38
+
34
39
// Implemented in JavaScript. Don't call these directly.
35
40
extern " C" {
36
41
@@ -87,7 +92,7 @@ EM_GENERIC_WIRE_TYPE _emval_call(
87
92
EM_METHOD_CALLER _emval_get_method_caller (
88
93
unsigned argCount, // including return value
89
94
const TYPEID argTypes[],
90
- bool asCtor);
95
+ EM_METHOD_CALLER_KIND asCtor);
91
96
EM_GENERIC_WIRE_TYPE _emval_call_method (
92
97
EM_METHOD_CALLER caller,
93
98
EM_VAL handle,
@@ -114,7 +119,7 @@ struct symbol_registrar {
114
119
}
115
120
};
116
121
117
- template <bool AsCtor , typename ReturnType, typename ... Args>
122
+ template <EM_METHOD_CALLER_KIND Kind , typename ReturnType, typename ... Args>
118
123
struct Signature {
119
124
/*
120
125
typedef typename BindingType<ReturnType>::WireType (*MethodCaller)(
@@ -125,7 +130,7 @@ struct Signature {
125
130
*/
126
131
static EM_METHOD_CALLER get_method_caller () {
127
132
static constexpr WithPolicies<>::ArgTypeList<ReturnType, Args...> args;
128
- thread_local EM_METHOD_CALLER mc = _emval_get_method_caller (args.getCount (), args.getTypes (), AsCtor );
133
+ thread_local EM_METHOD_CALLER mc = _emval_get_method_caller (args.getCount (), args.getTypes (), Kind );
129
134
return mc;
130
135
}
131
136
};
@@ -484,19 +489,23 @@ class val {
484
489
485
490
template <typename ... Args>
486
491
val new_ (Args&&... args) const {
487
- return internalCall<true , val>(internal::_emval_call, std::forward<Args>(args)...);
492
+ using namespace internal ;
493
+
494
+ return internalCall<EM_METHOD_CALLER_KIND::CONSTRUCTOR, val>(_emval_call, std::forward<Args>(args)...);
488
495
}
489
496
490
497
template <typename ... Args>
491
498
val operator ()(Args&&... args) const {
492
- return internalCall<false , val>(internal::_emval_call, std::forward<Args>(args)...);
499
+ using namespace internal ;
500
+
501
+ return internalCall<EM_METHOD_CALLER_KIND::FUNCTION, val>(_emval_call, std::forward<Args>(args)...);
493
502
}
494
503
495
504
template <typename ReturnValue, typename ... Args>
496
505
ReturnValue call (const char * name, Args&&... args) const {
497
506
using namespace internal ;
498
507
499
- return internalCall<false , ReturnValue>(
508
+ return internalCall<EM_METHOD_CALLER_KIND::FUNCTION , ReturnValue>(
500
509
[name](EM_METHOD_CALLER caller,
501
510
EM_VAL handle,
502
511
EM_DESTRUCTORS* destructorsRef,
@@ -586,14 +595,14 @@ class val {
586
595
template <typename WrapperType>
587
596
friend val internal::wrapped_extend (const std::string& , const val& );
588
597
589
- template <bool AsCtor , typename Ret, typename Implementation, typename ... Args>
598
+ template <internal::EM_METHOD_CALLER_KIND Kind , typename Ret, typename Implementation, typename ... Args>
590
599
Ret internalCall (Implementation impl, Args&&... args) const {
591
600
using namespace internal ;
592
601
593
602
WireTypePack<Args...> argv (std::forward<Args>(args)...);
594
603
EM_DESTRUCTORS destructors = nullptr ;
595
604
EM_GENERIC_WIRE_TYPE result = impl (
596
- Signature<AsCtor , Ret, Args...>::get_method_caller (),
605
+ Signature<Kind , Ret, Args...>::get_method_caller (),
597
606
as_handle (),
598
607
&destructors,
599
608
argv);
0 commit comments