summaryrefslogtreecommitdiff
path: root/rjit.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-12-22 22:17:58 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2023-12-22 22:18:14 -0800
commitda02d08f2793c1c5d2ce084d6ceb6fa58ed641f2 (patch)
treea2430bb9638d29f6f9fdae395837bc6bd5b5ef83 /rjit.c
parentef065102653378956f579985d10d3d4816dc87cf (diff)
RJIT: Rewind $! after compilation
Diffstat (limited to 'rjit.c')
-rw-r--r--rjit.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/rjit.c b/rjit.c
index eae0d100eb..82f17f7dbc 100644
--- a/rjit.c
+++ b/rjit.c
@@ -172,7 +172,7 @@ extern VALUE rb_gc_enable(void);
extern VALUE rb_gc_disable(void);
extern uint64_t rb_vm_insns_count;
-// Disable GC, TracePoint, JIT, and stats
+// Disable GC, TracePoint, JIT, stats, and $!
#define WITH_RJIT_ISOLATED_USING_PC(using_pc, stmt) do { \
VALUE was_disabled = rb_gc_disable(); \
\
@@ -192,8 +192,12 @@ extern uint64_t rb_vm_insns_count;
rjit_stats_p = false; \
uint64_t insns_count = rb_vm_insns_count; \
\
+ VALUE err = rb_errinfo(); \
+ \
stmt; \
\
+ rb_set_errinfo(err); \
+ \
rb_vm_insns_count = insns_count; \
rjit_stats_p = rb_rjit_opts.stats; \
\