@@ -466,7 +466,7 @@ pub unsafe fn delete_property_by_id(
466466 JS_DeletePropertyById ( cx, object, id, bp)
467467}
468468
469- unsafe fn generic_call (
469+ unsafe fn generic_call < const EXCEPTION_TO_REJECTION : bool > (
470470 cx : * mut JSContext ,
471471 argc : libc:: c_uint ,
472472 vp : * mut JSVal ,
@@ -488,7 +488,11 @@ unsafe fn generic_call(
488488 let thisobj = args. thisv ( ) ;
489489 if !thisobj. get ( ) . is_null_or_undefined ( ) && !thisobj. get ( ) . is_object ( ) {
490490 throw_invalid_this ( cx, proto_id) ;
491- return false ;
491+ return if EXCEPTION_TO_REJECTION {
492+ exception_to_promise ( cx, args. rval ( ) )
493+ } else {
494+ false
495+ } ;
492496 }
493497
494498 rooted ! ( in( cx) let obj = if thisobj. get( ) . is_object( ) {
@@ -507,7 +511,11 @@ unsafe fn generic_call(
507511 return true ;
508512 } else {
509513 throw_invalid_this ( cx, proto_id) ;
510- return false ;
514+ return if EXCEPTION_TO_REJECTION {
515+ exception_to_promise ( cx, args. rval ( ) )
516+ } else {
517+ false
518+ } ;
511519 }
512520 } ,
513521 } ;
@@ -522,30 +530,30 @@ unsafe fn generic_call(
522530}
523531
524532/// Generic method of IDL interface.
525- pub unsafe extern "C" fn generic_method (
533+ pub unsafe extern "C" fn generic_method < const EXCEPTION_TO_REJECTION : bool > (
526534 cx : * mut JSContext ,
527535 argc : libc:: c_uint ,
528536 vp : * mut JSVal ,
529537) -> bool {
530- generic_call ( cx, argc, vp, false , CallJitMethodOp )
538+ generic_call :: < EXCEPTION_TO_REJECTION > ( cx, argc, vp, false , CallJitMethodOp )
531539}
532540
533541/// Generic getter of IDL interface.
534- pub unsafe extern "C" fn generic_getter (
542+ pub unsafe extern "C" fn generic_getter < const EXCEPTION_TO_REJECTION : bool > (
535543 cx : * mut JSContext ,
536544 argc : libc:: c_uint ,
537545 vp : * mut JSVal ,
538546) -> bool {
539- generic_call ( cx, argc, vp, false , CallJitGetterOp )
547+ generic_call :: < EXCEPTION_TO_REJECTION > ( cx, argc, vp, false , CallJitGetterOp )
540548}
541549
542550/// Generic lenient getter of IDL interface.
543- pub unsafe extern "C" fn generic_lenient_getter (
551+ pub unsafe extern "C" fn generic_lenient_getter < const EXCEPTION_TO_REJECTION : bool > (
544552 cx : * mut JSContext ,
545553 argc : libc:: c_uint ,
546554 vp : * mut JSVal ,
547555) -> bool {
548- generic_call ( cx, argc, vp, true , CallJitGetterOp )
556+ generic_call :: < EXCEPTION_TO_REJECTION > ( cx, argc, vp, true , CallJitGetterOp )
549557}
550558
551559unsafe extern "C" fn call_setter (
@@ -569,7 +577,7 @@ pub unsafe extern "C" fn generic_setter(
569577 argc : libc:: c_uint ,
570578 vp : * mut JSVal ,
571579) -> bool {
572- generic_call ( cx, argc, vp, false , call_setter)
580+ generic_call :: < false > ( cx, argc, vp, false , call_setter)
573581}
574582
575583/// Generic lenient setter of IDL interface.
@@ -578,7 +586,7 @@ pub unsafe extern "C" fn generic_lenient_setter(
578586 argc : libc:: c_uint ,
579587 vp : * mut JSVal ,
580588) -> bool {
581- generic_call ( cx, argc, vp, true , call_setter)
589+ generic_call :: < false > ( cx, argc, vp, true , call_setter)
582590}
583591
584592unsafe extern "C" fn instance_class_has_proto_at_depth (
0 commit comments