@@ -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,
@@ -112,7 +117,7 @@ struct symbol_registrar {
112
117
}
113
118
};
114
119
115
- template <bool AsCtor , typename ReturnType, typename ... Args>
120
+ template <EM_METHOD_CALLER_KIND Kind , typename ReturnType, typename ... Args>
116
121
struct Signature {
117
122
/*
118
123
typedef typename BindingType<ReturnType>::WireType (*MethodCaller)(
@@ -123,7 +128,7 @@ struct Signature {
123
128
*/
124
129
static EM_METHOD_CALLER get_method_caller () {
125
130
static constexpr WithPolicies<>::ArgTypeList<ReturnType, Args...> args;
126
- thread_local EM_METHOD_CALLER mc = _emval_get_method_caller (args.getCount (), args.getTypes (), AsCtor );
131
+ thread_local EM_METHOD_CALLER mc = _emval_get_method_caller (args.getCount (), args.getTypes (), Kind );
127
132
return mc;
128
133
}
129
134
};
@@ -482,19 +487,23 @@ class val {
482
487
483
488
template <typename ... Args>
484
489
val new_ (Args&&... args) const {
485
- return internalCall<true , val>(internal::_emval_call, std::forward<Args>(args)...);
490
+ using namespace internal ;
491
+
492
+ return internalCall<EM_METHOD_CALLER_KIND::CONSTRUCTOR, val>(_emval_call, std::forward<Args>(args)...);
486
493
}
487
494
488
495
template <typename ... Args>
489
496
val operator ()(Args&&... args) const {
490
- return internalCall<false , val>(internal::_emval_call, std::forward<Args>(args)...);
497
+ using namespace internal ;
498
+
499
+ return internalCall<EM_METHOD_CALLER_KIND::FUNCTION, val>(_emval_call, std::forward<Args>(args)...);
491
500
}
492
501
493
502
template <typename ReturnValue, typename ... Args>
494
503
ReturnValue call (const char * name, Args&&... args) const {
495
504
using namespace internal ;
496
505
497
- return internalCall<false , ReturnValue>(
506
+ return internalCall<EM_METHOD_CALLER_KIND::FUNCTION , ReturnValue>(
498
507
[name](EM_METHOD_CALLER caller,
499
508
EM_VAL handle,
500
509
EM_DESTRUCTORS* destructorsRef,
@@ -578,14 +587,14 @@ class val {
578
587
template <typename WrapperType>
579
588
friend val internal::wrapped_extend (const std::string& , const val& );
580
589
581
- template <bool AsCtor , typename Ret, typename Implementation, typename ... Args>
590
+ template <internal::EM_METHOD_CALLER_KIND Kind , typename Ret, typename Implementation, typename ... Args>
582
591
Ret internalCall (Implementation impl, Args&&... args) const {
583
592
using namespace internal ;
584
593
585
594
WireTypePack<Args...> argv (std::forward<Args>(args)...);
586
595
EM_DESTRUCTORS destructors = nullptr ;
587
596
EM_GENERIC_WIRE_TYPE result = impl (
588
- Signature<AsCtor , Ret, Args...>::get_method_caller (),
597
+ Signature<Kind , Ret, Args...>::get_method_caller (),
589
598
as_handle (),
590
599
&destructors,
591
600
argv);
0 commit comments