debase-ruby_core_source 3.2.1 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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