File tree Expand file tree Collapse file tree 4 files changed +51
-0
lines changed
system/include/emscripten Expand file tree Collapse file tree 4 files changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -453,6 +453,12 @@ var LibraryEmVal = {
453
453
return delete object [ property ] ;
454
454
} ,
455
455
456
+ _emval_throw__deps : [ '$requireHandle' ] ,
457
+ _emval_throw : function ( object ) {
458
+ object = requireHandle ( object ) ;
459
+ throw object ;
460
+ } ,
461
+
456
462
} ;
457
463
458
464
mergeInto ( LibraryManager . library , LibraryEmVal ) ;
Original file line number Diff line number Diff line change @@ -97,6 +97,7 @@ namespace emscripten {
97
97
bool _emval_instanceof (EM_VAL object, EM_VAL constructor);
98
98
bool _emval_in (EM_VAL item, EM_VAL object);
99
99
bool _emval_delete (EM_VAL object, EM_VAL property);
100
+ bool _emval_throw (EM_VAL object);
100
101
}
101
102
102
103
template <const char * address>
@@ -511,6 +512,10 @@ namespace emscripten {
511
512
return internal::_emval_delete (handle, val (property).handle );
512
513
}
513
514
515
+ void throw_ () const {
516
+ internal::_emval_throw (handle);
517
+ }
518
+
514
519
private:
515
520
// takes ownership, assumes handle already incref'd
516
521
explicit val (internal::EM_VAL handle)
Original file line number Diff line number Diff line change @@ -57,6 +57,16 @@ void ensure_js_not(string js_code)
57
57
ensure_js (js_code);
58
58
}
59
59
60
+ void throw_js_error (val js_error)
61
+ {
62
+ js_error.throw_ ();
63
+ }
64
+
65
+ EMSCRIPTEN_BINDINGS (test_bindings)
66
+ {
67
+ emscripten::function (" throw_js_error" , &throw_js_error);
68
+ }
69
+
60
70
int main ()
61
71
{
62
72
printf (" start\n " );
@@ -512,6 +522,29 @@ int main()
512
522
ensure_js_not (" 1 in a" );
513
523
ensure_js_not (" 'c' in a" );
514
524
525
+ test (" void throw_() const" );
526
+ EM_ASM (
527
+ test_val_throw_ = function (error)
528
+ {
529
+ try
530
+ {
531
+ Module.throw_js_error (error);
532
+ return false ;
533
+ }
534
+ catch (error_thrown)
535
+ {
536
+ if (error_thrown != error)
537
+ throw error_thrown;
538
+ }
539
+ return true ;
540
+ }
541
+ );
542
+ ensure_js (" test_val_throw_(new Error)" );
543
+ ensure_js (" test_val_throw_(Error)" );
544
+ ensure_js (" test_val_throw_(2)" );
545
+ ensure_js (" test_val_throw_('message')" );
546
+ ensure_js (" test_val_throw_(new TypeError('message'))" );
547
+
515
548
// this test should probably go elsewhere as it is not a member of val
516
549
test (" template<typename T> std::vector<T> vecFromJSArray(val v)" );
517
550
EM_ASM (
Original file line number Diff line number Diff line change @@ -224,6 +224,13 @@ pass
224
224
pass
225
225
pass
226
226
test:
227
+ void throw_() const
228
+ pass
229
+ pass
230
+ pass
231
+ pass
232
+ pass
233
+ test:
227
234
template<typename T> std::vector<T> vecFromJSArray(val v)
228
235
pass
229
236
pass
You can’t perform that action at this time.
0 commit comments