@@ -58,9 +58,18 @@ void throw_js_error(val js_error)
58
58
js_error.throw_ ();
59
59
}
60
60
61
+ struct Dummy {};
62
+
63
+ Dummy * makeDummy ()
64
+ {
65
+ return new Dummy ();
66
+ }
67
+
61
68
EMSCRIPTEN_BINDINGS (test_bindings)
62
69
{
70
+ emscripten::class_<Dummy>(" Dummy" );
63
71
emscripten::function (" throw_js_error" , &throw_js_error);
72
+ emscripten::function (" makeDummy" , &makeDummy, emscripten::allow_raw_pointers ());
64
73
}
65
74
66
75
int main ()
@@ -574,7 +583,7 @@ int main()
574
583
ensure_js (" test_val_throw_('message')" );
575
584
ensure_js (" test_val_throw_(new TypeError('message'))" );
576
585
577
- // this test should probably go elsewhere as it is not a member of val
586
+ // these tests should probably go elsewhere as it is not a member of val
578
587
test (" template<typename T> std::vector<T> vecFromJSArray(const val& v)" );
579
588
EM_ASM (
580
589
// can't declare like this because i get:
@@ -593,6 +602,18 @@ int main()
593
602
ensure (aAsArray.at (2 ).as <string>() == " b" );
594
603
ensure (aAsArray.size () == 4 );
595
604
605
+ test (" template<typename T> std::vector<T *> vecFromJSArray(const val& v)" );
606
+ EM_ASM (
607
+ b = [];
608
+ b[0 ] = Module.makeDummy ();
609
+ b[1 ] = Module.makeDummy ();
610
+ );
611
+ const std::vector<Dummy *>& bAsArray = vecFromJSArray<Dummy *>(val::global (" b" ), allow_raw_pointers ());
612
+ ensure (bAsArray.size () == 2 );
613
+ for (auto *dummy : bAsArray) {
614
+ delete dummy;
615
+ }
616
+
596
617
test (" template<typename T> std::vector<T> convertJSArrayToNumberVector(const val& v)" );
597
618
598
619
const std::vector<float >& aAsNumberVectorFloat = convertJSArrayToNumberVector<float >(val::global (" a" ));
0 commit comments