@@ -526,20 +526,28 @@ FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
526
526
DISPATCH_NEXT (name); \
527
527
}
528
528
529
+ #define HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (name ) \
530
+ handle_##name: \
531
+ { \
532
+ auto & instruction = *reinterpret_cast <Op::name const *>(&bytecode[program_counter]); \
533
+ (void )instruction.execute_impl (*this ); \
534
+ DISPATCH_NEXT (name); \
535
+ }
536
+
529
537
HANDLE_INSTRUCTION (Add);
530
538
HANDLE_INSTRUCTION (ArrayAppend);
531
539
HANDLE_INSTRUCTION (AsyncIteratorClose);
532
540
HANDLE_INSTRUCTION (BitwiseAnd);
533
541
HANDLE_INSTRUCTION (BitwiseNot);
534
542
HANDLE_INSTRUCTION (BitwiseOr);
535
543
HANDLE_INSTRUCTION (BitwiseXor);
536
- HANDLE_INSTRUCTION (BlockDeclarationInstantiation);
544
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (BlockDeclarationInstantiation);
537
545
HANDLE_INSTRUCTION (Call);
538
546
HANDLE_INSTRUCTION (CallWithArgumentArray);
539
- HANDLE_INSTRUCTION (Catch);
547
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (Catch);
540
548
HANDLE_INSTRUCTION (ConcatString);
541
549
HANDLE_INSTRUCTION (CopyObjectExcludingProperties);
542
- HANDLE_INSTRUCTION (CreateLexicalEnvironment);
550
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (CreateLexicalEnvironment);
543
551
HANDLE_INSTRUCTION (CreateVariable);
544
552
HANDLE_INSTRUCTION (Decrement);
545
553
HANDLE_INSTRUCTION (DeleteById);
@@ -548,7 +556,7 @@ FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
548
556
HANDLE_INSTRUCTION (DeleteByValueWithThis);
549
557
HANDLE_INSTRUCTION (DeleteVariable);
550
558
HANDLE_INSTRUCTION (Div);
551
- HANDLE_INSTRUCTION (Dump);
559
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (Dump);
552
560
HANDLE_INSTRUCTION (EnterObjectEnvironment);
553
561
HANDLE_INSTRUCTION (Exp);
554
562
HANDLE_INSTRUCTION (GetById);
@@ -557,10 +565,10 @@ FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
557
565
HANDLE_INSTRUCTION (GetByValueWithThis);
558
566
HANDLE_INSTRUCTION (GetCalleeAndThisFromEnvironment);
559
567
HANDLE_INSTRUCTION (GetGlobal);
560
- HANDLE_INSTRUCTION (GetImportMeta);
568
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (GetImportMeta);
561
569
HANDLE_INSTRUCTION (GetIterator);
562
570
HANDLE_INSTRUCTION (GetMethod);
563
- HANDLE_INSTRUCTION (GetNewTarget);
571
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (GetNewTarget);
564
572
HANDLE_INSTRUCTION (GetNextMethodFromIteratorRecord);
565
573
HANDLE_INSTRUCTION (GetObjectFromIteratorRecord);
566
574
HANDLE_INSTRUCTION (GetObjectPropertyIterator);
@@ -576,8 +584,8 @@ FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
576
584
HANDLE_INSTRUCTION (IteratorClose);
577
585
HANDLE_INSTRUCTION (IteratorNext);
578
586
HANDLE_INSTRUCTION (IteratorToArray);
579
- HANDLE_INSTRUCTION (LeaveFinally);
580
- HANDLE_INSTRUCTION (LeaveLexicalEnvironment);
587
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (LeaveFinally);
588
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (LeaveLexicalEnvironment);
581
589
HANDLE_INSTRUCTION (LeaveUnwindContext);
582
590
HANDLE_INSTRUCTION (LeftShift);
583
591
HANDLE_INSTRUCTION (LessThan);
@@ -586,13 +594,13 @@ FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
586
594
HANDLE_INSTRUCTION (LooselyInequals);
587
595
HANDLE_INSTRUCTION (Mod);
588
596
HANDLE_INSTRUCTION (Mul);
589
- HANDLE_INSTRUCTION (NewArray);
597
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (NewArray);
590
598
HANDLE_INSTRUCTION (NewClass);
591
- HANDLE_INSTRUCTION (NewFunction);
592
- HANDLE_INSTRUCTION (NewObject);
593
- HANDLE_INSTRUCTION (NewPrimitiveArray);
594
- HANDLE_INSTRUCTION (NewRegExp);
595
- HANDLE_INSTRUCTION (NewTypeError);
599
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (NewFunction);
600
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (NewObject);
601
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (NewPrimitiveArray);
602
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (NewRegExp);
603
+ HANDLE_INSTRUCTION_WITHOUT_EXCEPTION_CHECK (NewTypeError);
596
604
HANDLE_INSTRUCTION (Not);
597
605
HANDLE_INSTRUCTION (PostfixDecrement);
598
606
HANDLE_INSTRUCTION (PostfixIncrement);
0 commit comments