debase-ruby_core_source 3.2.1 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/addr2line.h +3 -1
  4. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/darray.h +246 -0
  5. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/debug_counter.h +7 -10
  6. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/eval_intern.h +3 -1
  7. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/id.h +44 -0
  8. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/insns_info.inc +128 -154
  9. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/array.h +9 -20
  10. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/bits.h +568 -0
  11. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/class.h +11 -2
  12. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/cmdlineopt.h +5 -1
  13. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compile.h +0 -1
  14. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/error.h +24 -2
  15. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/gc.h +29 -0
  16. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/hash.h +19 -44
  17. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/imemo.h +0 -1
  18. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/io.h +137 -0
  19. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/parse.h +108 -0
  20. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/process.h +0 -14
  21. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/range.h +2 -2
  22. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/re.h +1 -1
  23. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/ruby_parser.h +69 -0
  24. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/signal.h +4 -0
  25. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/string.h +15 -0
  26. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/struct.h +9 -34
  27. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/thread.h +14 -0
  28. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/variable.h +17 -35
  29. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/vm.h +9 -2
  30. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/iseq.h +4 -4
  31. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/method.h +8 -7
  32. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/node.h +128 -0
  33. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/node_name.inc +4 -2
  34. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/parse.h +19 -6
  35. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1/internal/bits.h → ruby-3.3.0-preview3/parser_bits.h} +4 -4
  36. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_node.h +32 -0
  37. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_st.h +162 -0
  38. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_value.h +106 -0
  39. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/prism_compile.h +18 -0
  40. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ractor_core.h +10 -4
  41. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regint.h +8 -0
  42. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regparse.h +2 -1
  43. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/revision.h +5 -0
  44. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/rubyparser.h +1403 -0
  45. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/shape.h +32 -22
  46. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/symbol.h +2 -3
  47. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_none.h +1 -0
  48. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_pthread.h +66 -28
  49. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_win32.h +1 -6
  50. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/variable.h +9 -2
  51. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/version.h +7 -3
  52. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm.inc +383 -497
  53. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_callinfo.h +54 -16
  54. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_core.h +92 -57
  55. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_exec.h +11 -10
  56. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_insnhelper.h +20 -23
  57. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_opts.h +0 -5
  58. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/yjit.h +12 -12
  59. data/lib/debase/ruby_core_source/version.rb +1 -1
  60. metadata +120 -115
  61. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/darray.h +0 -179
  62. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/internal/io.h +0 -38
  63. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/internal/parse.h +0 -25
  64. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/node.h +0 -514
  65. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/opt_sc.inc +0 -109
  66. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/revision.h +0 -5
  67. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/transient_heap.h +0 -65
  68. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/builtin.h +0 -0
  69. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/build_assert/build_assert.h +0 -0
  70. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/check_type/check_type.h +0 -0
  71. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/container_of/container_of.h +0 -0
  72. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/list/list.h +0 -0
  73. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/str/str.h +0 -0
  74. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/constant.h +0 -0
  75. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/dln.h +0 -0
  76. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/encindex.h +0 -0
  77. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/hrtime.h +0 -0
  78. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/id_table.h +0 -0
  79. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/insns.inc +0 -0
  80. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/basic_operators.h +0 -0
  81. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/bignum.h +0 -0
  82. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compar.h +0 -0
  83. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compilers.h +0 -0
  84. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/complex.h +0 -0
  85. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/cont.h +0 -0
  86. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/dir.h +0 -0
  87. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enc.h +0 -0
  88. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/encoding.h +0 -0
  89. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enum.h +0 -0
  90. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enumerator.h +0 -0
  91. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/eval.h +0 -0
  92. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/file.h +0 -0
  93. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/fixnum.h +0 -0
  94. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/inits.h +0 -0
  95. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/load.h +0 -0
  96. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/loadpath.h +0 -0
  97. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/math.h +0 -0
  98. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/missing.h +0 -0
  99. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/numeric.h +0 -0
  100. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/object.h +0 -0
  101. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/proc.h +0 -0
  102. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/ractor.h +0 -0
  103. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/random.h +0 -0
  104. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/rational.h +0 -0
  105. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/sanitizers.h +0 -0
  106. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/serial.h +0 -0
  107. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/static_assert.h +0 -0
  108. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/symbol.h +0 -0
  109. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/time.h +0 -0
  110. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/transcode.h +0 -0
  111. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/util.h +0 -0
  112. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/warnings.h +0 -0
  113. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal.h +0 -0
  114. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/known_errors.inc +0 -0
  115. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/optinsn.inc +0 -0
  116. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/optunifs.inc +0 -0
  117. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/probes_helper.h +0 -0
  118. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regenc.h +0 -0
  119. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/rjit.h +0 -0
  120. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/rjit_c.h +0 -0
  121. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ruby_assert.h +0 -0
  122. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ruby_atomic.h +0 -0
  123. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/siphash.h +0 -0
  124. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/timev.h +0 -0
  125. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/transcode_data.h +0 -0
  126. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_call_iseq_optimized.inc +0 -0
  127. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_debug.h +0 -0
  128. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_sync.h +0 -0
  129. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vmtc.inc +0 -0
@@ -43,6 +43,7 @@ enum vm_call_flag_bits {
43
43
 
44
44
  struct rb_callinfo_kwarg {
45
45
  int keyword_len;
46
+ int references;
46
47
  VALUE keywords[];
47
48
  };
48
49
 
@@ -65,8 +66,12 @@ struct rb_callinfo {
65
66
  VALUE argc;
66
67
  };
67
68
 
68
- #ifndef USE_EMBED_CI
69
+ #if !defined(USE_EMBED_CI) || (USE_EMBED_CI+0)
70
+ #undef USE_EMBED_CI
69
71
  #define USE_EMBED_CI 1
72
+ #else
73
+ #undef USE_EMBED_CI
74
+ #define USE_EMBED_CI 0
70
75
  #endif
71
76
 
72
77
  #if SIZEOF_VALUE == 8
@@ -96,7 +101,9 @@ struct rb_callinfo {
96
101
  static inline bool
97
102
  vm_ci_packed_p(const struct rb_callinfo *ci)
98
103
  {
99
- #if USE_EMBED_CI
104
+ if (!USE_EMBED_CI) {
105
+ return 0;
106
+ }
100
107
  if (LIKELY(((VALUE)ci) & 0x01)) {
101
108
  return 1;
102
109
  }
@@ -104,9 +111,6 @@ vm_ci_packed_p(const struct rb_callinfo *ci)
104
111
  VM_ASSERT(IMEMO_TYPE_P(ci, imemo_callinfo));
105
112
  return 0;
106
113
  }
107
- #else
108
- return 0;
109
- #endif
110
114
  }
111
115
 
112
116
  static inline bool
@@ -196,12 +200,13 @@ vm_ci_dump(const struct rb_callinfo *ci)
196
200
  static inline const struct rb_callinfo *
197
201
  vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
198
202
  {
199
- #if USE_EMBED_CI
200
- if (VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg)) {
203
+ if (kwarg) {
204
+ ((struct rb_callinfo_kwarg *)kwarg)->references++;
205
+ }
206
+ if (USE_EMBED_CI && VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg)) {
201
207
  RB_DEBUG_COUNTER_INC(ci_packed);
202
208
  return vm_ci_new_id(mid, flag, argc, kwarg);
203
209
  }
204
- #endif
205
210
 
206
211
  const bool debug = 0;
207
212
  if (debug) ruby_debug_printf("%s:%d ", file, line);
@@ -295,6 +300,17 @@ struct rb_callcache {
295
300
  #define VM_CALLCACHE_UNMARKABLE FL_FREEZE
296
301
  #define VM_CALLCACHE_ON_STACK FL_EXIVAR
297
302
 
303
+ #define VM_CALLCACHE_IVAR IMEMO_FL_USER0
304
+ #define VM_CALLCACHE_BF IMEMO_FL_USER1
305
+ #define VM_CALLCACHE_SUPER IMEMO_FL_USER2
306
+ #define VM_CALLCACHE_REFINEMENT IMEMO_FL_USER3
307
+
308
+ enum vm_cc_type {
309
+ cc_type_normal, // chained from ccs
310
+ cc_type_super,
311
+ cc_type_refinement,
312
+ };
313
+
298
314
  extern const struct rb_callcache *rb_vm_empty_cc(void);
299
315
  extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
300
316
 
@@ -311,14 +327,39 @@ vm_cc_attr_index_initialize(const struct rb_callcache *cc, shape_id_t shape_id)
311
327
  static inline const struct rb_callcache *
312
328
  vm_cc_new(VALUE klass,
313
329
  const struct rb_callable_method_entry_struct *cme,
314
- vm_call_handler call)
330
+ vm_call_handler call,
331
+ enum vm_cc_type type)
315
332
  {
316
333
  const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
334
+
335
+ switch (type) {
336
+ case cc_type_normal:
337
+ break;
338
+ case cc_type_super:
339
+ *(VALUE *)&cc->flags |= VM_CALLCACHE_SUPER;
340
+ break;
341
+ case cc_type_refinement:
342
+ *(VALUE *)&cc->flags |= VM_CALLCACHE_REFINEMENT;
343
+ break;
344
+ }
345
+
317
346
  vm_cc_attr_index_initialize(cc, INVALID_SHAPE_ID);
318
347
  RB_DEBUG_COUNTER_INC(cc_new);
319
348
  return cc;
320
349
  }
321
350
 
351
+ static inline bool
352
+ vm_cc_super_p(const struct rb_callcache *cc)
353
+ {
354
+ return (cc->flags & VM_CALLCACHE_SUPER) != 0;
355
+ }
356
+
357
+ static inline bool
358
+ vm_cc_refinement_p(const struct rb_callcache *cc)
359
+ {
360
+ return (cc->flags & VM_CALLCACHE_REFINEMENT) != 0;
361
+ }
362
+
322
363
  #define VM_CC_ON_STACK(clazz, call, aux, cme) \
323
364
  (struct rb_callcache) { \
324
365
  .flags = T_IMEMO | \
@@ -438,9 +479,6 @@ vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *c
438
479
 
439
480
  /* callcache: mutate */
440
481
 
441
- #define VM_CALLCACH_IVAR IMEMO_FL_USER0
442
- #define VM_CALLCACH_BF IMEMO_FL_USER1
443
-
444
482
  static inline void
445
483
  vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
446
484
  {
@@ -460,13 +498,13 @@ vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id
460
498
  VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
461
499
  VM_ASSERT(cc != vm_cc_empty());
462
500
  *attr_value = (attr_index_t)(index + 1) | ((uintptr_t)(dest_shape_id) << SHAPE_FLAG_SHIFT);
463
- *(VALUE *)&cc->flags |= VM_CALLCACH_IVAR;
501
+ *(VALUE *)&cc->flags |= VM_CALLCACHE_IVAR;
464
502
  }
465
503
 
466
504
  static inline bool
467
505
  vm_cc_ivar_p(const struct rb_callcache *cc)
468
506
  {
469
- return (cc->flags & VM_CALLCACH_IVAR) != 0;
507
+ return (cc->flags & VM_CALLCACHE_IVAR) != 0;
470
508
  }
471
509
 
472
510
  static inline void
@@ -495,13 +533,13 @@ vm_cc_bf_set(const struct rb_callcache *cc, const struct rb_builtin_function *bf
495
533
  VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
496
534
  VM_ASSERT(cc != vm_cc_empty());
497
535
  *(const struct rb_builtin_function **)&cc->aux_.bf = bf;
498
- *(VALUE *)&cc->flags |= VM_CALLCACH_BF;
536
+ *(VALUE *)&cc->flags |= VM_CALLCACHE_BF;
499
537
  }
500
538
 
501
539
  static inline bool
502
540
  vm_cc_bf_p(const struct rb_callcache *cc)
503
541
  {
504
- return (cc->flags & VM_CALLCACH_BF) != 0;
542
+ return (cc->flags & VM_CALLCACHE_BF) != 0;
505
543
  }
506
544
 
507
545
  static inline void
@@ -132,18 +132,9 @@ extern int ruby_assert_critical_section_entered;
132
132
  #define RUBY_NSIG NSIG
133
133
 
134
134
  #if defined(SIGCLD)
135
- # define RUBY_SIGCHLD (SIGCLD)
135
+ # define RUBY_SIGCHLD (SIGCLD)
136
136
  #elif defined(SIGCHLD)
137
- # define RUBY_SIGCHLD (SIGCHLD)
138
- #else
139
- # define RUBY_SIGCHLD (0)
140
- #endif
141
-
142
- /* platforms with broken or non-existent SIGCHLD work by polling */
143
- #if defined(__APPLE__)
144
- # define SIGCHLD_LOSSY (1)
145
- #else
146
- # define SIGCHLD_LOSSY (0)
137
+ # define RUBY_SIGCHLD (SIGCHLD)
147
138
  #endif
148
139
 
149
140
  #if defined(SIGSEGV) && defined(HAVE_SIGALTSTACK) && defined(SA_SIGINFO) && !defined(__NetBSD__)
@@ -191,9 +182,6 @@ void *rb_register_sigaltstack(void *);
191
182
  #if OPT_DIRECT_THREADED_CODE
192
183
  #undef OPT_DIRECT_THREADED_CODE
193
184
  #endif /* OPT_DIRECT_THREADED_CODE */
194
- #if OPT_STACK_CACHING
195
- #undef OPT_STACK_CACHING
196
- #endif /* OPT_STACK_CACHING */
197
185
  #endif /* OPT_CALL_THREADED_CODE */
198
186
 
199
187
  void rb_vm_encoded_insn_data_table_init(void);
@@ -290,7 +278,7 @@ union iseq_inline_storage_entry {
290
278
  };
291
279
 
292
280
  struct rb_calling_info {
293
- const struct rb_callinfo *ci;
281
+ const struct rb_call_data *cd;
294
282
  const struct rb_callcache *cc;
295
283
  VALUE block_handler;
296
284
  VALUE recv;
@@ -515,10 +503,17 @@ struct rb_iseq_constant_body {
515
503
  const rb_iseq_t *mandatory_only_iseq;
516
504
 
517
505
  #if USE_RJIT || USE_YJIT
518
- // Function pointer for JIT code
519
- rb_jit_func_t jit_func;
520
- // Number of total calls with jit_exec()
521
- long unsigned total_calls;
506
+ // Function pointer for JIT code on jit_exec()
507
+ rb_jit_func_t jit_entry;
508
+ // Number of calls on jit_exec()
509
+ long unsigned jit_entry_calls;
510
+ #endif
511
+
512
+ #if USE_YJIT
513
+ // Function pointer for JIT code on jit_exec_exception()
514
+ rb_jit_func_t jit_exception;
515
+ // Number of calls on jit_exec_exception()
516
+ long unsigned jit_exception_calls;
522
517
  #endif
523
518
 
524
519
  #if USE_RJIT
@@ -529,6 +524,8 @@ struct rb_iseq_constant_body {
529
524
  #if USE_YJIT
530
525
  // YJIT stores some data on each iseq.
531
526
  void *yjit_payload;
527
+ // Used to estimate how frequently this ISEQ gets called
528
+ uint64_t yjit_calls_at_interv;
532
529
  #endif
533
530
  };
534
531
 
@@ -557,22 +554,21 @@ struct rb_iseq_struct {
557
554
 
558
555
  #define ISEQ_BODY(iseq) ((iseq)->body)
559
556
 
560
- #ifndef USE_LAZY_LOAD
557
+ #if !defined(USE_LAZY_LOAD) || !(USE_LAZY_LOAD+0)
561
558
  #define USE_LAZY_LOAD 0
562
559
  #endif
563
560
 
564
- #if USE_LAZY_LOAD
565
- const rb_iseq_t *rb_iseq_complete(const rb_iseq_t *iseq);
561
+ #if !USE_LAZY_LOAD
562
+ static inline const rb_iseq_t *rb_iseq_complete(const rb_iseq_t *iseq) {return 0;}
566
563
  #endif
564
+ const rb_iseq_t *rb_iseq_complete(const rb_iseq_t *iseq);
567
565
 
568
566
  static inline const rb_iseq_t *
569
567
  rb_iseq_check(const rb_iseq_t *iseq)
570
568
  {
571
- #if USE_LAZY_LOAD
572
- if (ISEQ_BODY(iseq) == NULL) {
569
+ if (USE_LAZY_LOAD && ISEQ_BODY(iseq) == NULL) {
573
570
  rb_iseq_complete((rb_iseq_t *)iseq);
574
571
  }
575
- #endif
576
572
  return iseq;
577
573
  }
578
574
 
@@ -640,15 +636,51 @@ typedef struct rb_vm_struct {
640
636
  struct rb_ractor_struct *lock_owner;
641
637
  unsigned int lock_rec;
642
638
 
643
- // barrier
644
- bool barrier_waiting;
645
- unsigned int barrier_cnt;
646
- rb_nativethread_cond_t barrier_cond;
647
-
648
639
  // join at exit
649
640
  rb_nativethread_cond_t terminate_cond;
650
641
  bool terminate_waiting;
642
+
643
+ #ifndef RUBY_THREAD_PTHREAD_H
644
+ bool barrier_waiting;
645
+ unsigned int barrier_cnt;
646
+ rb_nativethread_cond_t barrier_cond;
647
+ #endif
651
648
  } sync;
649
+
650
+ // ractor scheduling
651
+ struct {
652
+ rb_nativethread_lock_t lock;
653
+ struct rb_ractor_struct *lock_owner;
654
+ bool locked;
655
+
656
+ rb_nativethread_cond_t cond; // GRQ
657
+ unsigned int snt_cnt; // count of shared NTs
658
+ unsigned int dnt_cnt; // count of dedicated NTs
659
+
660
+ unsigned int running_cnt;
661
+
662
+ unsigned int max_cpu;
663
+ struct ccan_list_head grq; // // Global Ready Queue
664
+ unsigned int grq_cnt;
665
+
666
+ // running threads
667
+ struct ccan_list_head running_threads;
668
+
669
+ // threads which switch context by timeslice
670
+ struct ccan_list_head timeslice_threads;
671
+
672
+ struct ccan_list_head zombie_threads;
673
+
674
+ // true if timeslice timer is not enable
675
+ bool timeslice_wait_inf;
676
+
677
+ // barrier
678
+ rb_nativethread_cond_t barrier_complete_cond;
679
+ rb_nativethread_cond_t barrier_release_cond;
680
+ bool barrier_waiting;
681
+ unsigned int barrier_waiting_cnt;
682
+ unsigned int barrier_serial;
683
+ } sched;
652
684
  } ractor;
653
685
 
654
686
  #ifdef USE_SIGALTSTACK
@@ -819,19 +851,16 @@ struct rb_block {
819
851
  };
820
852
 
821
853
  typedef struct rb_control_frame_struct {
822
- const VALUE *pc; /* cfp[0] */
823
- VALUE *sp; /* cfp[1] */
824
- const rb_iseq_t *iseq; /* cfp[2] */
825
- VALUE self; /* cfp[3] / block[0] */
826
- const VALUE *ep; /* cfp[4] / block[1] */
827
- const void *block_code; /* cfp[5] / block[2] */ /* iseq or ifunc or forwarded block handler */
828
- VALUE *__bp__; /* cfp[6] */ /* outside vm_push_frame, use vm_base_ptr instead. */
829
-
854
+ const VALUE *pc; // cfp[0]
855
+ VALUE *sp; // cfp[1]
856
+ const rb_iseq_t *iseq; // cfp[2]
857
+ VALUE self; // cfp[3] / block[0]
858
+ const VALUE *ep; // cfp[4] / block[1]
859
+ const void *block_code; // cfp[5] / block[2] -- iseq, ifunc, or forwarded block handler
860
+ void *jit_return; // cfp[6] -- return address for JIT code
830
861
  #if VM_DEBUG_BP_CHECK
831
- VALUE *bp_check; /* cfp[7] */
862
+ VALUE *bp_check; // cfp[7]
832
863
  #endif
833
- // Return address for YJIT code
834
- void *jit_return;
835
864
  } rb_control_frame_t;
836
865
 
837
866
  extern const rb_data_type_t ruby_threadptr_data_type;
@@ -1559,12 +1588,6 @@ vm_block_handler_verify(MAYBE_UNUSED(VALUE block_handler))
1559
1588
  (vm_block_handler_type(block_handler), 1));
1560
1589
  }
1561
1590
 
1562
- static inline int
1563
- vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
1564
- {
1565
- return ((VALUE) cfp->block_code) == block_handler;
1566
- }
1567
-
1568
1591
  static inline enum rb_block_type
1569
1592
  vm_block_type(const struct rb_block *block)
1570
1593
  {
@@ -1693,17 +1716,13 @@ VALUE rb_proc_alloc(VALUE klass);
1693
1716
  VALUE rb_proc_dup(VALUE self);
1694
1717
 
1695
1718
  /* for debug */
1696
- extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
1697
- extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
1698
- extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
1699
- #if OPT_STACK_CACHING
1700
- , VALUE reg_a, VALUE reg_b
1701
- #endif
1702
- );
1719
+ extern bool rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, FILE *);
1720
+ extern bool rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc, FILE *);
1721
+ extern bool rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, FILE *);
1703
1722
 
1704
- #define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
1705
- #define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
1706
- void rb_vm_bugreport(const void *);
1723
+ #define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp, stderr)
1724
+ #define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp), stderr)
1725
+ bool rb_vm_bugreport(const void *, FILE *);
1707
1726
  typedef void (*ruby_sighandler_t)(int);
1708
1727
  RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 4, 5)
1709
1728
  NORETURN(void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...));
@@ -1758,6 +1777,7 @@ rb_vm_living_threads_init(rb_vm_t *vm)
1758
1777
  ccan_list_head_init(&vm->waiting_fds);
1759
1778
  ccan_list_head_init(&vm->workqueue);
1760
1779
  ccan_list_head_init(&vm->ractor.set);
1780
+ ccan_list_head_init(&vm->ractor.sched.zombie_threads);
1761
1781
  }
1762
1782
 
1763
1783
  typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
@@ -1771,6 +1791,7 @@ rb_thread_t * ruby_thread_from_native(void);
1771
1791
  int ruby_thread_set_native(rb_thread_t *th);
1772
1792
  int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
1773
1793
  void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
1794
+ void rb_vm_env_write(const VALUE *ep, int index, VALUE v);
1774
1795
  VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
1775
1796
 
1776
1797
  void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
@@ -1857,6 +1878,20 @@ rb_current_execution_context(bool expect_ec)
1857
1878
  #else
1858
1879
  rb_execution_context_t *ec = ruby_current_ec;
1859
1880
  #endif
1881
+
1882
+ /* On the shared objects, `__tls_get_addr()` is used to access the TLS
1883
+ * and the address of the `ruby_current_ec` can be stored on a function
1884
+ * frame. However, this address can be mis-used after native thread
1885
+ * migration of a coroutine.
1886
+ * 1) Get `ptr =&ruby_current_ec` op NT1 and store it on the frame.
1887
+ * 2) Context switch and resume it on the NT2.
1888
+ * 3) `ptr` is used on NT2 but it accesses to the TLS on NT1.
1889
+ * This assertion checks such misusage.
1890
+ *
1891
+ * To avoid accidents, `GET_EC()` should be called once on the frame.
1892
+ * Note that inlining can produce the problem.
1893
+ */
1894
+ VM_ASSERT(ec == rb_current_ec_noinline());
1860
1895
  #else
1861
1896
  rb_execution_context_t *ec = native_tls_get(ruby_current_ec_key);
1862
1897
  #endif
@@ -21,11 +21,7 @@ typedef rb_iseq_t *ISEQ;
21
21
  #define DEBUG_ENTER_INSN(insn) \
22
22
  rb_vmdebug_debug_print_pre(ec, GET_CFP(), GET_PC());
23
23
 
24
- #if OPT_STACK_CACHING
25
- #define SC_REGS() , reg_a, reg_b
26
- #else
27
24
  #define SC_REGS()
28
- #endif
29
25
 
30
26
  #define DEBUG_END_INSN() \
31
27
  rb_vmdebug_debug_print_post(ec, GET_CFP() SC_REGS());
@@ -40,10 +36,6 @@ typedef rb_iseq_t *ISEQ;
40
36
  #define throwdebug if(0)ruby_debug_printf
41
37
  /* #define throwdebug ruby_debug_printf */
42
38
 
43
- #ifndef USE_INSNS_COUNTER
44
- #define USE_INSNS_COUNTER 0
45
- #endif
46
-
47
39
  /************************************************/
48
40
  #if defined(DISPATCH_XXX)
49
41
  error !
@@ -80,8 +72,7 @@ error !
80
72
  (reg_cfp->pc - ISEQ_BODY(reg_cfp->iseq)->iseq_encoded), \
81
73
  RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), \
82
74
  rb_iseq_line_no(reg_cfp->iseq, reg_pc - ISEQ_BODY(reg_cfp->iseq)->iseq_encoded)); \
83
- } \
84
- if (USE_INSNS_COUNTER) vm_insns_counter_count_insn(BIN(insn));
75
+ }
85
76
 
86
77
  #define INSN_DISPATCH_SIG(insn)
87
78
 
@@ -174,10 +165,20 @@ default: \
174
165
  #define THROW_EXCEPTION(exc) return (VALUE)(exc)
175
166
  #endif
176
167
 
168
+ // Run the interpreter from the JIT
169
+ #define VM_EXEC(ec, val) do { \
170
+ if (val == Qundef) { \
171
+ VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH); \
172
+ val = vm_exec(ec); \
173
+ } \
174
+ } while (0)
175
+
176
+ // Run the JIT from the interpreter
177
177
  #define JIT_EXEC(ec, val) do { \
178
178
  rb_jit_func_t func; \
179
179
  if (val == Qundef && (func = jit_compile(ec))) { \
180
180
  val = func(ec, ec->cfp); \
181
+ RESTORE_REGS(); /* fix cfp for tailcall */ \
181
182
  if (ec->tag->state) THROW_EXCEPTION(val); \
182
183
  } \
183
184
  } while (0)
@@ -20,30 +20,29 @@ RUBY_EXTERN rb_serial_t ruby_vm_global_cvar_state;
20
20
  # define RJIT_STATS RUBY_DEBUG
21
21
  #endif
22
22
 
23
+ #if USE_YJIT // We want vm_insns_count on any YJIT-enabled build
24
+ // Increment vm_insns_count for --yjit-stats. We increment this even when
25
+ // --yjit or --yjit-stats is not used because branching to skip it is slower.
26
+ // We also don't use ATOMIC_INC for performance, allowing inaccuracy on Ractors.
27
+ #define YJIT_COLLECT_USAGE_INSN(insn) rb_vm_insns_count++
28
+ #else
29
+ #define YJIT_COLLECT_USAGE_INSN(insn) // none
30
+ #endif
31
+
32
+ #if RJIT_STATS
33
+ #define RJIT_COLLECT_USAGE_INSN(insn) rb_rjit_collect_vm_usage_insn(insn)
34
+ #else
35
+ #define RJIT_COLLECT_USAGE_INSN(insn) // none
36
+ #endif
37
+
23
38
  #if VM_COLLECT_USAGE_DETAILS
24
39
  #define COLLECT_USAGE_INSN(insn) vm_collect_usage_insn(insn)
25
40
  #define COLLECT_USAGE_OPERAND(insn, n, op) vm_collect_usage_operand((insn), (n), ((VALUE)(op)))
26
-
27
41
  #define COLLECT_USAGE_REGISTER(reg, s) vm_collect_usage_register((reg), (s))
28
- #elif RJIT_STATS && YJIT_STATS
29
- // Both flags could be enabled at the same time. You need to call both in that case.
30
- #define COLLECT_USAGE_INSN(insn) rb_rjit_collect_vm_usage_insn(insn); rb_yjit_collect_vm_usage_insn(insn)
31
- #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
32
- #define COLLECT_USAGE_REGISTER(reg, s) /* none */
33
- #elif RJIT_STATS
34
- // for --rjit-stats
35
- #define COLLECT_USAGE_INSN(insn) rb_rjit_collect_vm_usage_insn(insn)
36
- #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
37
- #define COLLECT_USAGE_REGISTER(reg, s) /* none */
38
- #elif YJIT_STATS
39
- /* for --yjit-stats */
40
- #define COLLECT_USAGE_INSN(insn) rb_yjit_collect_vm_usage_insn(insn)
41
- #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
42
- #define COLLECT_USAGE_REGISTER(reg, s) /* none */
43
42
  #else
44
- #define COLLECT_USAGE_INSN(insn) /* none */
45
- #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
46
- #define COLLECT_USAGE_REGISTER(reg, s) /* none */
43
+ #define COLLECT_USAGE_INSN(insn) YJIT_COLLECT_USAGE_INSN(insn); RJIT_COLLECT_USAGE_INSN(insn)
44
+ #define COLLECT_USAGE_OPERAND(insn, n, op) // none
45
+ #define COLLECT_USAGE_REGISTER(reg, s) // none
47
46
  #endif
48
47
 
49
48
  /**********************************************************/
@@ -182,10 +181,8 @@ CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, bool enable
182
181
  /**********************************************************/
183
182
 
184
183
  #define CALL_SIMPLE_METHOD() do { \
185
- rb_snum_t x = leaf ? INSN_ATTR(width) : 0; \
186
- rb_snum_t y = attr_width_opt_send_without_block(0); \
187
- rb_snum_t z = x - y; \
188
- ADD_PC(z); \
184
+ rb_snum_t insn_width = attr_width_opt_send_without_block(0); \
185
+ ADD_PC(-insn_width); \
189
186
  DISPATCH_ORIGINAL_INSN(opt_send_without_block); \
190
187
  } while (0)
191
188
 
@@ -54,17 +54,12 @@
54
54
  #define OPT_OPERANDS_UNIFICATION 1
55
55
  #define OPT_INSTRUCTIONS_UNIFICATION 0
56
56
  #define OPT_UNIFY_ALL_COMBINATION 0
57
- #define OPT_STACK_CACHING 0
58
57
 
59
58
  /* misc */
60
59
  #ifndef OPT_SUPPORT_JOKE
61
60
  #define OPT_SUPPORT_JOKE 0
62
61
  #endif
63
62
 
64
- #ifndef OPT_SUPPORT_CALL_C_FUNCTION
65
- #define OPT_SUPPORT_CALL_C_FUNCTION 0
66
- #endif
67
-
68
63
  #ifndef VM_COLLECT_USAGE_DETAILS
69
64
  #define VM_COLLECT_USAGE_DETAILS 0
70
65
  #endif
@@ -25,16 +25,17 @@
25
25
  #endif
26
26
 
27
27
  // Expose these as declarations since we are building YJIT.
28
- bool rb_yjit_enabled_p(void);
29
- bool rb_yjit_compile_new_iseqs(void);
30
- unsigned rb_yjit_call_threshold(void);
28
+ extern uint64_t rb_yjit_call_threshold;
29
+ extern uint64_t rb_yjit_cold_threshold;
30
+ extern uint64_t rb_yjit_live_iseq_count;
31
+ extern bool rb_yjit_enabled_p;
32
+ void rb_yjit_incr_counter(const char *counter_name);
31
33
  void rb_yjit_invalidate_all_method_lookup_assumptions(void);
32
34
  void rb_yjit_cme_invalidate(rb_callable_method_entry_t *cme);
33
- void rb_yjit_collect_vm_usage_insn(int insn);
34
35
  void rb_yjit_collect_binding_alloc(void);
35
36
  void rb_yjit_collect_binding_set(void);
36
- bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec);
37
- void rb_yjit_init(void);
37
+ void rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec, bool jit_exception);
38
+ void rb_yjit_init(bool yjit_enabled);
38
39
  void rb_yjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop);
39
40
  void rb_yjit_constant_state_changed(ID id);
40
41
  void rb_yjit_iseq_mark(void *payload);
@@ -43,21 +44,20 @@ void rb_yjit_iseq_free(void *payload);
43
44
  void rb_yjit_before_ractor_spawn(void);
44
45
  void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx);
45
46
  void rb_yjit_tracing_invalidate_all(void);
47
+ void rb_yjit_show_usage(int help, int highlight, unsigned int width, int columns);
46
48
 
47
49
  #else
48
50
  // !USE_YJIT
49
51
  // In these builds, YJIT could never be turned on. Provide dummy implementations.
50
52
 
51
- static inline bool rb_yjit_enabled_p(void) { return false; }
52
- static inline bool rb_yjit_compile_new_iseqs(void) { return false; }
53
- static inline unsigned rb_yjit_call_threshold(void) { return UINT_MAX; }
53
+ #define rb_yjit_enabled_p false
54
+ static inline void rb_yjit_incr_counter(const char *counter_name) {}
54
55
  static inline void rb_yjit_invalidate_all_method_lookup_assumptions(void) {}
55
56
  static inline void rb_yjit_cme_invalidate(rb_callable_method_entry_t *cme) {}
56
- static inline void rb_yjit_collect_vm_usage_insn(int insn) {}
57
57
  static inline void rb_yjit_collect_binding_alloc(void) {}
58
58
  static inline void rb_yjit_collect_binding_set(void) {}
59
- static inline bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec) { return false; }
60
- static inline void rb_yjit_init(void) {}
59
+ static inline void rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec, bool jit_exception) {}
60
+ static inline void rb_yjit_init(bool yjit_enabled) {}
61
61
  static inline void rb_yjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop) {}
62
62
  static inline void rb_yjit_constant_state_changed(ID id) {}
63
63
  static inline void rb_yjit_iseq_mark(void *payload) {}
@@ -1,5 +1,5 @@
1
1
  module Debase
2
2
  module RubyCoreSource
3
- VERSION = '3.2.1'
3
+ VERSION = '3.2.3'
4
4
  end
5
5
  end