@@ -466,7 +466,7 @@ pub unsafe fn delete_property_by_id(
466
466
JS_DeletePropertyById ( cx, object, id, bp)
467
467
}
468
468
469
- unsafe fn generic_call (
469
+ unsafe fn generic_call < const EXCEPTION_TO_REJECTION : bool > (
470
470
cx : * mut JSContext ,
471
471
argc : libc:: c_uint ,
472
472
vp : * mut JSVal ,
@@ -488,7 +488,11 @@ unsafe fn generic_call(
488
488
let thisobj = args. thisv ( ) ;
489
489
if !thisobj. get ( ) . is_null_or_undefined ( ) && !thisobj. get ( ) . is_object ( ) {
490
490
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
+ } ;
492
496
}
493
497
494
498
rooted ! ( in( cx) let obj = if thisobj. get( ) . is_object( ) {
@@ -507,7 +511,11 @@ unsafe fn generic_call(
507
511
return true ;
508
512
} else {
509
513
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
+ } ;
511
519
}
512
520
} ,
513
521
} ;
@@ -522,30 +530,30 @@ unsafe fn generic_call(
522
530
}
523
531
524
532
/// 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 > (
526
534
cx : * mut JSContext ,
527
535
argc : libc:: c_uint ,
528
536
vp : * mut JSVal ,
529
537
) -> bool {
530
- generic_call ( cx, argc, vp, false , CallJitMethodOp )
538
+ generic_call :: < EXCEPTION_TO_REJECTION > ( cx, argc, vp, false , CallJitMethodOp )
531
539
}
532
540
533
541
/// 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 > (
535
543
cx : * mut JSContext ,
536
544
argc : libc:: c_uint ,
537
545
vp : * mut JSVal ,
538
546
) -> bool {
539
- generic_call ( cx, argc, vp, false , CallJitGetterOp )
547
+ generic_call :: < EXCEPTION_TO_REJECTION > ( cx, argc, vp, false , CallJitGetterOp )
540
548
}
541
549
542
550
/// 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 > (
544
552
cx : * mut JSContext ,
545
553
argc : libc:: c_uint ,
546
554
vp : * mut JSVal ,
547
555
) -> bool {
548
- generic_call ( cx, argc, vp, true , CallJitGetterOp )
556
+ generic_call :: < EXCEPTION_TO_REJECTION > ( cx, argc, vp, true , CallJitGetterOp )
549
557
}
550
558
551
559
unsafe extern "C" fn call_setter (
@@ -569,7 +577,7 @@ pub unsafe extern "C" fn generic_setter(
569
577
argc : libc:: c_uint ,
570
578
vp : * mut JSVal ,
571
579
) -> bool {
572
- generic_call ( cx, argc, vp, false , call_setter)
580
+ generic_call :: < false > ( cx, argc, vp, false , call_setter)
573
581
}
574
582
575
583
/// Generic lenient setter of IDL interface.
@@ -578,7 +586,7 @@ pub unsafe extern "C" fn generic_lenient_setter(
578
586
argc : libc:: c_uint ,
579
587
vp : * mut JSVal ,
580
588
) -> bool {
581
- generic_call ( cx, argc, vp, true , call_setter)
589
+ generic_call :: < false > ( cx, argc, vp, true , call_setter)
582
590
}
583
591
584
592
unsafe extern "C" fn instance_class_has_proto_at_depth (
0 commit comments