debase-ruby_core_source 3.3.5 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.idea/vcs.xml +28 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +14 -0
  6. data/Rakefile +3 -1
  7. data/debase-ruby_core_source.gemspec +1 -0
  8. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/builtin.h +7 -1
  9. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/darray.h +22 -6
  10. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/debug_counter.h +1 -1
  11. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/dln.h +0 -2
  12. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/id.h +9 -0
  13. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/insns.inc +10 -2
  14. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/insns_info.inc +819 -312
  15. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/array.h +1 -0
  16. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/basic_operators.h +2 -0
  17. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/bits.h +82 -0
  18. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/class.h +1 -1
  19. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/encoding.h +2 -0
  20. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/error.h +28 -0
  21. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/fixnum.h +1 -0
  22. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/gc.h +24 -28
  23. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/hash.h +1 -0
  24. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/imemo.h +7 -1
  25. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/io.h +4 -1
  26. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/parse.h +16 -3
  27. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/proc.h +1 -0
  28. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/ractor.h +4 -0
  29. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/sanitizers.h +60 -39
  30. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/string.h +34 -18
  31. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/thread.h +29 -0
  32. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/vm.h +3 -3
  33. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/known_errors.inc +103 -103
  34. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/method.h +1 -0
  35. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/optunifs.inc +1 -1
  36. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/parse.h +5 -4
  37. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/ast.h +2156 -453
  38. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/defines.h +44 -7
  39. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/diagnostic.h +24 -6
  40. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/extension.h +2 -2
  41. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/node.h +0 -21
  42. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/options.h +94 -3
  43. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/parser.h +82 -40
  44. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/prism.h +47 -11
  45. data/lib/debase/ruby_core_source/ruby-3.4.0-p-1/prism/regexp.h +43 -0
  46. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/static_literals.h +3 -2
  47. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_char.h +1 -2
  48. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_constant_pool.h +0 -8
  49. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_integer.h +22 -15
  50. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_newline_list.h +11 -0
  51. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_string.h +28 -12
  52. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/version.h +3 -3
  53. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism_compile.h +23 -12
  54. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ractor_core.h +9 -20
  55. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/regint.h +0 -4
  56. data/lib/debase/ruby_core_source/ruby-3.4.0-p-1/revision.h +5 -0
  57. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/rubyparser.h +171 -250
  58. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/shape.h +2 -1
  59. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/symbol.h +6 -1
  60. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/thread_pthread.h +26 -25
  61. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/version.h +1 -1
  62. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm.inc +467 -207
  63. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_callinfo.h +24 -2
  64. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_core.h +62 -48
  65. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_insnhelper.h +7 -2
  66. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_sync.h +3 -3
  67. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vmtc.inc +10 -2
  68. data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/yjit.h +1 -0
  69. data/lib/debase/ruby_core_source/version.rb +1 -1
  70. data/lib/debase/ruby_core_source.rb +4 -2
  71. data/test/deduce_source_dir_test.rb +31 -0
  72. metadata +163 -150
  73. data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/regexp.h +0 -33
  74. data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_string_list.h +0 -44
  75. data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/revision.h +0 -5
  76. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/addr2line.h +0 -0
  77. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ccan/build_assert/build_assert.h +0 -0
  78. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ccan/check_type/check_type.h +0 -0
  79. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ccan/container_of/container_of.h +0 -0
  80. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ccan/list/list.h +0 -0
  81. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ccan/str/str.h +0 -0
  82. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/constant.h +0 -0
  83. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/encindex.h +0 -0
  84. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/eval_intern.h +0 -0
  85. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/hrtime.h +0 -0
  86. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/id_table.h +0 -0
  87. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/bignum.h +0 -0
  88. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/cmdlineopt.h +0 -0
  89. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/compar.h +0 -0
  90. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/compile.h +0 -0
  91. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/compilers.h +0 -0
  92. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/complex.h +0 -0
  93. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/cont.h +0 -0
  94. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/dir.h +0 -0
  95. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/enc.h +0 -0
  96. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/enum.h +0 -0
  97. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/enumerator.h +0 -0
  98. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/eval.h +0 -0
  99. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/file.h +0 -0
  100. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/inits.h +0 -0
  101. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/load.h +0 -0
  102. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/loadpath.h +0 -0
  103. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/math.h +0 -0
  104. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/missing.h +0 -0
  105. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/numeric.h +0 -0
  106. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/object.h +0 -0
  107. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/process.h +0 -0
  108. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/random.h +0 -0
  109. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/range.h +0 -0
  110. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/rational.h +0 -0
  111. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/re.h +0 -0
  112. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/ruby_parser.h +0 -0
  113. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/serial.h +0 -0
  114. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/signal.h +0 -0
  115. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/st.h +0 -0
  116. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/static_assert.h +0 -0
  117. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/struct.h +0 -0
  118. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/symbol.h +0 -0
  119. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/time.h +0 -0
  120. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/transcode.h +0 -0
  121. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/util.h +0 -0
  122. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/variable.h +0 -0
  123. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal/warnings.h +0 -0
  124. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/internal.h +0 -0
  125. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/iseq.h +0 -0
  126. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/node.h +0 -0
  127. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/node_name.inc +0 -0
  128. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/optinsn.inc +0 -0
  129. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/parser_bits.h +0 -0
  130. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/parser_node.h +0 -0
  131. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/parser_st.h +0 -0
  132. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/parser_value.h +0 -0
  133. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/encoding.h +0 -0
  134. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/pack.h +0 -0
  135. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/prettyprint.h +0 -0
  136. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_buffer.h +0 -0
  137. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_list.h +0 -0
  138. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_memchr.h +0 -0
  139. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_strncasecmp.h +0 -0
  140. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/prism/util/pm_strpbrk.h +0 -0
  141. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/probes_helper.h +0 -0
  142. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/regenc.h +0 -0
  143. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/regparse.h +0 -0
  144. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/rjit.h +0 -0
  145. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/rjit_c.h +0 -0
  146. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ruby_assert.h +0 -0
  147. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/ruby_atomic.h +0 -0
  148. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/siphash.h +0 -0
  149. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/thread_none.h +0 -0
  150. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/thread_win32.h +0 -0
  151. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/timev.h +0 -0
  152. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/transcode_data.h +0 -0
  153. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/variable.h +0 -0
  154. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_call_iseq_optimized.inc +0 -0
  155. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_debug.h +0 -0
  156. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_exec.h +0 -0
  157. /data/lib/debase/ruby_core_source/{ruby-3.4.0-preview1 → ruby-3.4.0-p-1}/vm_opts.h +0 -0
@@ -37,6 +37,7 @@ size_t rb_ary_size_as_embedded(VALUE ary);
37
37
  void rb_ary_make_embedded(VALUE ary);
38
38
  bool rb_ary_embeddable_p(VALUE ary);
39
39
  VALUE rb_ary_diff(VALUE ary1, VALUE ary2);
40
+ RUBY_EXTERN VALUE rb_cArray_empty_frozen;
40
41
 
41
42
  static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
42
43
  static inline bool ARY_PTR_USING_P(VALUE ary);
@@ -37,6 +37,8 @@ enum ruby_basic_operators {
37
37
  BOP_OR,
38
38
  BOP_CMP,
39
39
  BOP_DEFAULT,
40
+ BOP_PACK,
41
+ BOP_INCLUDE_P,
40
42
 
41
43
  BOP_LAST_
42
44
  };
@@ -90,6 +90,7 @@
90
90
 
91
91
  #define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
92
92
 
93
+ #ifndef MUL_OVERFLOW_SIGNED_INTEGER_P
93
94
  #if __has_builtin(__builtin_mul_overflow_p)
94
95
  # define MUL_OVERFLOW_P(a, b) \
95
96
  __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
@@ -131,6 +132,87 @@
131
132
  # define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LONG_MIN, LONG_MAX)
132
133
  # define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, INT_MIN, INT_MAX)
133
134
  #endif
135
+ #endif
136
+
137
+ #ifndef ADD_OVERFLOW_SIGNED_INTEGER_P
138
+ #if __has_builtin(__builtin_add_overflow_p)
139
+ # define ADD_OVERFLOW_P(a, b) \
140
+ __builtin_add_overflow_p((a), (b), (__typeof__(a * b))0)
141
+ #elif __has_builtin(__builtin_add_overflow)
142
+ # define ADD_OVERFLOW_P(a, b) \
143
+ __extension__ ({ __typeof__(a) c; __builtin_add_overflow((a), (b), &c); })
144
+ #endif
145
+
146
+ #define ADD_OVERFLOW_SIGNED_INTEGER_P(a, b, min, max) ( \
147
+ (a) > 0 ? (b) > (max) - (a) : (b) < (min) - (a))
148
+
149
+ #if __has_builtin(__builtin_add_overflow_p)
150
+ /* __builtin_add_overflow_p can take bitfield */
151
+ /* and GCC permits bitfields for integers other than int */
152
+ # define ADD_OVERFLOW_FIXNUM_P(a, b) \
153
+ __extension__ ({ \
154
+ struct { long fixnum : sizeof(long) * CHAR_BIT - 1; } c = { 0 }; \
155
+ __builtin_add_overflow_p((a), (b), c.fixnum); \
156
+ })
157
+ #else
158
+ # define ADD_OVERFLOW_FIXNUM_P(a, b) \
159
+ ADD_OVERFLOW_SIGNED_INTEGER_P(a, b, FIXNUM_MIN, FIXNUM_MAX)
160
+ #endif
161
+
162
+ #if defined(ADD_OVERFLOW_P) && defined(USE___BUILTIN_ADD_OVERFLOW_LONG_LONG)
163
+ # define ADD_OVERFLOW_LONG_LONG_P(a, b) ADD_OVERFLOW_P(a, b)
164
+ #else
165
+ # define ADD_OVERFLOW_LONG_LONG_P(a, b) ADD_OVERFLOW_SIGNED_INTEGER_P(a, b, LLONG_MIN, LLONG_MAX)
166
+ #endif
167
+
168
+ #ifdef ADD_OVERFLOW_P
169
+ # define ADD_OVERFLOW_LONG_P(a, b) ADD_OVERFLOW_P(a, b)
170
+ # define ADD_OVERFLOW_INT_P(a, b) ADD_OVERFLOW_P(a, b)
171
+ #else
172
+ # define ADD_OVERFLOW_LONG_P(a, b) ADD_OVERFLOW_SIGNED_INTEGER_P(a, b, LONG_MIN, LONG_MAX)
173
+ # define ADD_OVERFLOW_INT_P(a, b) ADD_OVERFLOW_SIGNED_INTEGER_P(a, b, INT_MIN, INT_MAX)
174
+ #endif
175
+ #endif
176
+
177
+ #ifndef SUB_OVERFLOW_SIGNED_INTEGER_P
178
+ #if __has_builtin(__builtin_sub_overflow_p)
179
+ # define SUB_OVERFLOW_P(a, b) \
180
+ __builtin_sub_overflow_p((a), (b), (__typeof__(a * b))0)
181
+ #elif __has_builtin(__builtin_sub_overflow)
182
+ # define SUB_OVERFLOW_P(a, b) \
183
+ __extension__ ({ __typeof__(a) c; __builtin_sub_overflow((a), (b), &c); })
184
+ #endif
185
+
186
+ #define SUB_OVERFLOW_SIGNED_INTEGER_P(a, b, min, max) ( \
187
+ (b) > 0 ? (a) < (min) + (b) : (a) > (max) + (b))
188
+
189
+ #if __has_builtin(__builtin_sub_overflow_p)
190
+ /* __builtin_sub_overflow_p can take bitfield */
191
+ /* and GCC permits bitfields for integers other than int */
192
+ # define SUB_OVERFLOW_FIXNUM_P(a, b) \
193
+ __extension__ ({ \
194
+ struct { long fixnum : sizeof(long) * CHAR_BIT - 1; } c = { 0 }; \
195
+ __builtin_sub_overflow_p((a), (b), c.fixnum); \
196
+ })
197
+ #else
198
+ # define SUB_OVERFLOW_FIXNUM_P(a, b) \
199
+ SUB_OVERFLOW_SIGNED_INTEGER_P(a, b, FIXNUM_MIN, FIXNUM_MAX)
200
+ #endif
201
+
202
+ #if defined(SUB_OVERFLOW_P) && defined(USE___BUILTIN_SUB_OVERFLOW_LONG_LONG)
203
+ # define SUB_OVERFLOW_LONG_LONG_P(a, b) SUB_OVERFLOW_P(a, b)
204
+ #else
205
+ # define SUB_OVERFLOW_LONG_LONG_P(a, b) SUB_OVERFLOW_SIGNED_INTEGER_P(a, b, LLONG_MIN, LLONG_MAX)
206
+ #endif
207
+
208
+ #ifdef SUB_OVERFLOW_P
209
+ # define SUB_OVERFLOW_LONG_P(a, b) SUB_OVERFLOW_P(a, b)
210
+ # define SUB_OVERFLOW_INT_P(a, b) SUB_OVERFLOW_P(a, b)
211
+ #else
212
+ # define SUB_OVERFLOW_LONG_P(a, b) SUB_OVERFLOW_SIGNED_INTEGER_P(a, b, LONG_MIN, LONG_MAX)
213
+ # define SUB_OVERFLOW_INT_P(a, b) SUB_OVERFLOW_SIGNED_INTEGER_P(a, b, INT_MIN, INT_MAX)
214
+ #endif
215
+ #endif
134
216
 
135
217
  #ifdef HAVE_UINT128_T
136
218
  # define bit_length(x) \
@@ -83,7 +83,7 @@ struct RClass {
83
83
  struct rb_id_table *m_tbl;
84
84
  };
85
85
 
86
- // Assert that classes can be embedded in size_pools[2] (which has 160B slot size)
86
+ // Assert that classes can be embedded in heaps[2] (which has 160B slot size)
87
87
  STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass) + sizeof(rb_classext_t) <= 4 * RVALUE_SIZE);
88
88
 
89
89
  struct RClass_and_rb_classext_t {
@@ -28,6 +28,8 @@ int rb_encdb_dummy(const char *name);
28
28
  void rb_encdb_declare(const char *name);
29
29
  void rb_enc_set_base(const char *name, const char *orig);
30
30
  int rb_enc_set_dummy(int index);
31
+ void rb_enc_raw_set(VALUE obj, rb_encoding *enc);
32
+
31
33
  PUREFUNC(int rb_data_is_encoding(VALUE obj));
32
34
 
33
35
  /* vm.c */
@@ -72,6 +72,7 @@ const char *rb_builtin_type_name(int t);
72
72
  const char *rb_builtin_class_name(VALUE x);
73
73
  PRINTF_ARGS(void rb_warn_deprecated(const char *fmt, const char *suggest, ...), 1, 3);
74
74
  PRINTF_ARGS(void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...), 2, 4);
75
+ PRINTF_ARGS(void rb_warn_reserved_name(const char *removal, const char *fmt, ...), 2, 3);
75
76
  #if RUBY_DEBUG
76
77
  # include "ruby/version.h"
77
78
  # define RUBY_VERSION_SINCE(major, minor) (RUBY_API_VERSION_CODE >= (major * 10000) + (minor) * 100)
@@ -110,6 +111,14 @@ rb_deprecated_method_to_be_removed(const char *removal)
110
111
  RBIMPL_ATTR_DIAGNOSE_IF(RUBY_VERSION_STRING_SINCE(removal), "deprecated method to be removed", "error")
111
112
  {
112
113
  }
114
+
115
+ RBIMPL_ATTR_FORCEINLINE()
116
+ static void
117
+ rb_diagnose_reserved_name_at(const char *coming)
118
+ RBIMPL_ATTR_DIAGNOSE_IF(!RUBY_VERSION_isdigit(coming[0]), "malformed version number", "error")
119
+ RBIMPL_ATTR_DIAGNOSE_IF(RUBY_VERSION_STRING_SINCE(coming), "reserved name already in use", "error")
120
+ {
121
+ }
113
122
  # else
114
123
  RBIMPL_ATTR_ERROR(("deprecated"))
115
124
  void rb_deprecated_method_to_be_removed(const char *);
@@ -117,16 +126,32 @@ void rb_deprecated_method_to_be_removed(const char *);
117
126
  (sizeof(char[1-2*(!RUBY_VERSION_isdigit(removal[0]) || RUBY_VERSION_STRING_SINCE(removal))])!=1 ? \
118
127
  rb_deprecated_method_to_be_removed(removal) : \
119
128
  RBIMPL_ASSERT_NOTHING)
129
+
130
+ RBIMPL_ATTR_ERROR(("deprecated"))
131
+ void rb_diagnose_reserved_name_at(const char *);
132
+ # define rb_diagnose_reserved_name_at(coming) \
133
+ (sizeof(char[1-2*(!RUBY_VERSION_isdigit(coming[0]) || RUBY_VERSION_STRING_SINCE(coming))])!=1 ? \
134
+ rb_diagnose_reserved_name_at(coming) : \
135
+ RBIMPL_ASSERT_NOTHING)
136
+
120
137
  # endif
121
138
  # define rb_warn_deprecated_to_remove_at(removal, ...) \
122
139
  (rb_deprecated_method_to_be_removed(#removal), \
123
140
  rb_warn_deprecated_to_remove(#removal, __VA_ARGS__))
141
+
142
+ # define rb_warn_reserved_name_at(coming, ...) \
143
+ (rb_diagnose_reserved_name_at(#coming), \
144
+ rb_warn_reserved_name(#coming, __VA_ARGS__))
124
145
  # endif
125
146
  #endif
126
147
  #ifndef rb_warn_deprecated_to_remove_at
127
148
  # define rb_warn_deprecated_to_remove_at(removal, ...) \
128
149
  rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
129
150
  #endif
151
+ #ifndef rb_warn_reserved_name_at
152
+ # define rb_warn_reserved_name_at(removal, ...) \
153
+ rb_warn_reserved_name(#removal, __VA_ARGS__)
154
+ #endif
130
155
  #ifndef RUBY_VERSION_SINCE
131
156
  # define RUBY_VERSION_SINCE(major, minor) 0
132
157
  #endif
@@ -142,6 +167,8 @@ VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*,
142
167
  PRINTF_ARGS(void rb_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3);
143
168
  PRINTF_ARGS(void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3);
144
169
  PRINTF_ARGS(void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...), 3, 4);
170
+ PRINTF_ARGS(void rb_enc_compile_warning(rb_encoding *enc, const char *file, int line, const char *fmt, ...), 4, 5);
171
+ PRINTF_ARGS(void rb_enc_compile_warn(rb_encoding *enc, const char *file, int line, const char *fmt, ...), 4, 5);
145
172
  rb_warning_category_t rb_warning_category_from_name(VALUE category);
146
173
  bool rb_warning_category_enabled_p(rb_warning_category_t category);
147
174
  VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
@@ -158,6 +185,7 @@ NORETURN(static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
158
185
  static inline void Check_Type(VALUE v, enum ruby_value_type t);
159
186
  static inline bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
160
187
  #define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
188
+ void rb_bug_without_die(const char *fmt, ...);
161
189
 
162
190
  RUBY_SYMBOL_EXPORT_BEGIN
163
191
  /* error.c (export) */
@@ -10,6 +10,7 @@
10
10
  */
11
11
  #include "ruby/internal/config.h" /* for HAVE_LONG_LONG */
12
12
  #include <limits.h> /* for CHAR_BIT */
13
+ #include "internal/bits.h" /* for MUL_OVERFLOW_FIXNUM_P */
13
14
  #include "internal/compilers.h" /* for __has_builtin */
14
15
  #include "ruby/internal/stdbool.h" /* for bool */
15
16
  #include "ruby/intern.h" /* for rb_big_mul */
@@ -16,8 +16,8 @@
16
16
  #include "ruby/ruby.h" /* for rb_event_flag_t */
17
17
  #include "vm_core.h" /* for GET_EC() */
18
18
 
19
- #ifndef USE_SHARED_GC
20
- # define USE_SHARED_GC 0
19
+ #ifndef USE_MODULAR_GC
20
+ # define USE_MODULAR_GC 0
21
21
  #endif
22
22
 
23
23
  #if defined(__x86_64__) && !defined(_ILP32) && defined(__GNUC__)
@@ -163,12 +163,6 @@ struct rb_objspace; /* in vm_core.h */
163
163
  RB_OBJ_WRITE(old, _slot, young); \
164
164
  } while (0)
165
165
 
166
- // We use SIZE_POOL_COUNT number of shape IDs for transitions out of different size pools
167
- // The next available shape ID will be the SPECIAL_CONST_SHAPE_ID
168
- #ifndef SIZE_POOL_COUNT
169
- # define SIZE_POOL_COUNT 5
170
- #endif
171
-
172
166
  /* Used in places that could malloc during, which can cause the GC to run. We
173
167
  * need to temporarily disable the GC to allow the malloc to happen.
174
168
  * Allocating memory during GC is a bad idea, so use this only when absolutely
@@ -180,25 +174,14 @@ struct rb_objspace; /* in vm_core.h */
180
174
  #define DURING_GC_COULD_MALLOC_REGION_END() \
181
175
  if (_already_disabled == Qfalse) rb_gc_enable()
182
176
 
183
- typedef struct ractor_newobj_size_pool_cache {
184
- struct RVALUE *freelist;
185
- struct heap_page *using_page;
186
- } rb_ractor_newobj_size_pool_cache_t;
187
-
188
- typedef struct ractor_newobj_cache {
189
- size_t incremental_mark_step_allocated_slots;
190
- rb_ractor_newobj_size_pool_cache_t size_pool_caches[SIZE_POOL_COUNT];
191
- } rb_ractor_newobj_cache_t;
192
-
193
177
  /* gc.c */
194
- extern int ruby_disable_gc;
195
178
  RUBY_ATTR_MALLOC void *ruby_mimmalloc(size_t size);
196
179
  RUBY_ATTR_MALLOC void *ruby_mimcalloc(size_t num, size_t size);
197
180
  void ruby_mimfree(void *ptr);
198
181
  void rb_gc_prepare_heap(void);
199
182
  void rb_objspace_set_event_hook(const rb_event_flag_t event);
200
- VALUE rb_objspace_gc_enable(struct rb_objspace *);
201
- VALUE rb_objspace_gc_disable(struct rb_objspace *);
183
+ VALUE rb_objspace_gc_enable(void *objspace);
184
+ VALUE rb_objspace_gc_disable(void *objspace);
202
185
  void ruby_gc_set_params(void);
203
186
  void rb_gc_copy_attributes(VALUE dest, VALUE obj);
204
187
  size_t rb_size_mul_or_raise(size_t, size_t, VALUE); /* used in compile.c */
@@ -212,12 +195,13 @@ RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
212
195
  static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
213
196
  static inline void *ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3));
214
197
  static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
215
- void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
198
+
199
+ void *rb_gc_ractor_cache_alloc(rb_ractor_t *ractor);
200
+ void rb_gc_ractor_cache_free(void *cache);
201
+
216
202
  bool rb_gc_size_allocatable_p(size_t size);
217
- size_t *rb_gc_size_pool_sizes(void);
218
- size_t rb_gc_size_pool_id_for_size(size_t size);
219
- int rb_objspace_garbage_object_p(VALUE obj);
220
- bool rb_gc_is_ptr_to_obj(const void *ptr);
203
+ size_t *rb_gc_heap_sizes(void);
204
+ size_t rb_gc_heap_id_for_size(size_t size);
221
205
 
222
206
  void rb_gc_mark_and_move(VALUE *ptr);
223
207
 
@@ -228,6 +212,9 @@ void rb_gc_ref_update_table_values_only(st_table *tbl);
228
212
 
229
213
  void rb_gc_initial_stress_set(VALUE flag);
230
214
 
215
+ void rb_gc_before_fork(void);
216
+ void rb_gc_after_fork(rb_pid_t pid);
217
+
231
218
  #define rb_gc_mark_and_move_ptr(ptr) do { \
232
219
  VALUE _obj = (VALUE)*(ptr); \
233
220
  rb_gc_mark_and_move(&_obj); \
@@ -238,8 +225,9 @@ RUBY_SYMBOL_EXPORT_BEGIN
238
225
  /* exports for objspace module */
239
226
  void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
240
227
  void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
241
- int rb_objspace_markable_object_p(VALUE obj);
242
228
  int rb_objspace_internal_object_p(VALUE obj);
229
+ int rb_objspace_garbage_object_p(VALUE obj);
230
+ bool rb_gc_pointer_to_heap_p(VALUE obj);
243
231
 
244
232
  void rb_objspace_each_objects(
245
233
  int (*callback)(void *start, void *end, size_t stride, void *data),
@@ -249,13 +237,13 @@ size_t rb_gc_obj_slot_size(VALUE obj);
249
237
 
250
238
  VALUE rb_gc_disable_no_rest(void);
251
239
 
240
+ #define RB_GC_MAX_NAME_LEN 20
252
241
 
253
242
  /* gc.c (export) */
254
243
  const char *rb_objspace_data_type_name(VALUE obj);
255
244
  VALUE rb_wb_protected_newobj_of(struct rb_execution_context_struct *, VALUE, VALUE, size_t);
256
245
  VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
257
246
  size_t rb_obj_memsize_of(VALUE);
258
- void rb_gc_verify_internal_consistency(void);
259
247
  size_t rb_obj_gc_flags(VALUE, ID[], size_t);
260
248
  void rb_gc_mark_values(long n, const VALUE *values);
261
249
  void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
@@ -263,11 +251,19 @@ void rb_gc_update_values(long n, VALUE *values);
263
251
  void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
264
252
  void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3));
265
253
  void ruby_sized_xfree(void *x, size_t size);
254
+
255
+ const char *rb_gc_active_gc_name(void);
256
+ int rb_gc_modular_gc_loaded_p(void);
257
+
258
+ #if USE_MODULAR_GC
259
+ void ruby_load_modular_gc_from_argv(int argc, char **argv);
260
+ #endif
266
261
  RUBY_SYMBOL_EXPORT_END
267
262
 
268
263
  int rb_ec_stack_check(struct rb_execution_context_struct *ec);
269
264
  void rb_gc_writebarrier_remember(VALUE obj);
270
265
  const char *rb_obj_info(VALUE obj);
266
+ void ruby_annotate_mmap(const void *addr, unsigned long size, const char *name);
271
267
 
272
268
  #if defined(HAVE_MALLOC_USABLE_SIZE) || defined(HAVE_MALLOC_SIZE) || defined(_WIN32)
273
269
 
@@ -88,6 +88,7 @@ int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_fu
88
88
  int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
89
89
  VALUE rb_ident_hash_new_with_size(st_index_t size);
90
90
  void rb_hash_free(VALUE hash);
91
+ RUBY_EXTERN VALUE rb_cHash_empty_frozen;
91
92
 
92
93
  static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
93
94
  static inline VALUE RHASH_IFNONE(VALUE h);
@@ -79,7 +79,12 @@ struct vm_ifunc_argc {
79
79
  #endif
80
80
  };
81
81
 
82
- /*! IFUNC (Internal FUNCtion) */
82
+ /*! IFUNC (Internal FUNCtion)
83
+ *
84
+ * Bookkeeping for converting a C function and some closed-over data into a
85
+ * block passable to methods. Like Ruby Proc, but not directly accessible at
86
+ * Ruby level since this is an imemo. See rb_block_call() and friends.
87
+ */
83
88
  struct vm_ifunc {
84
89
  VALUE flags;
85
90
  VALUE *svar_lep;
@@ -87,6 +92,7 @@ struct vm_ifunc {
87
92
  const void *data;
88
93
  struct vm_ifunc_argc argc;
89
94
  };
95
+ #define IFUNC_YIELD_OPTIMIZABLE IMEMO_FL_USER0
90
96
 
91
97
  struct rb_imemo_tmpbuf_struct {
92
98
  VALUE flags;
@@ -15,7 +15,7 @@ struct rb_io;
15
15
 
16
16
  #include "ruby/io.h" /* for rb_io_t */
17
17
 
18
- #define IO_WITHOUT_GVL(func, arg) rb_thread_call_without_gvl(func, arg, RUBY_UBF_IO, 0)
18
+ #define IO_WITHOUT_GVL(func, arg) rb_nogvl(func, arg, RUBY_UBF_IO, 0, RB_NOGVL_OFFLOAD_SAFE)
19
19
  #define IO_WITHOUT_GVL_INT(func, arg) (int)(VALUE)IO_WITHOUT_GVL(func, arg)
20
20
 
21
21
  /** Ruby's IO, metadata and buffers. */
@@ -135,6 +135,9 @@ RUBY_SYMBOL_EXPORT_BEGIN
135
135
  void rb_maygvl_fd_fix_cloexec(int fd);
136
136
  int rb_gc_for_fd(int err);
137
137
  void rb_write_error_str(VALUE mesg);
138
+
139
+ VALUE rb_io_blocking_region_wait(struct rb_io *io, rb_blocking_function_t *function, void *argument, enum rb_io_event events);
140
+ VALUE rb_io_blocking_region(struct rb_io *io, rb_blocking_function_t *function, void *argument);
138
141
  RUBY_SYMBOL_EXPORT_END
139
142
 
140
143
  #endif /* INTERNAL_IO_H */
@@ -12,6 +12,17 @@
12
12
  #include "rubyparser.h"
13
13
  #include "internal/static_assert.h"
14
14
 
15
+ // The default parser to use for Ruby code.
16
+ typedef enum {
17
+ RB_DEFAULT_PARSER_PARSE_Y,
18
+ RB_DEFAULT_PARSER_PRISM,
19
+ } ruby_default_parser_enum;
20
+
21
+ ruby_default_parser_enum rb_ruby_default_parser(void);
22
+ void rb_ruby_default_parser_set(ruby_default_parser_enum parser);
23
+
24
+ #define rb_ruby_prism_p() (rb_ruby_default_parser() == RB_DEFAULT_PARSER_PRISM)
25
+
15
26
  #ifdef UNIVERSAL_PARSER
16
27
  #define rb_encoding const void
17
28
  #endif
@@ -55,7 +66,7 @@ void rb_ruby_parser_set_script_lines(rb_parser_t *p);
55
66
  void rb_ruby_parser_error_tolerant(rb_parser_t *p);
56
67
  void rb_ruby_parser_keep_tokens(rb_parser_t *p);
57
68
  typedef rb_parser_string_t*(rb_parser_lex_gets_func)(struct parser_params*, rb_parser_input_data, int);
58
- rb_ast_t *rb_parser_compile(rb_parser_t *p, rb_parser_lex_gets_func *gets, const char *fname_ptr, long fname_len, rb_encoding *fname_enc, rb_parser_input_data input, int line);
69
+ rb_ast_t *rb_parser_compile(rb_parser_t *p, rb_parser_lex_gets_func *gets, VALUE fname, rb_parser_input_data input, int line);
59
70
 
60
71
  RUBY_SYMBOL_EXPORT_BEGIN
61
72
 
@@ -63,12 +74,14 @@ rb_encoding *rb_ruby_parser_encoding(rb_parser_t *p);
63
74
  int rb_ruby_parser_end_seen_p(rb_parser_t *p);
64
75
  int rb_ruby_parser_set_yydebug(rb_parser_t *p, int flag);
65
76
  rb_parser_string_t *rb_str_to_parser_string(rb_parser_t *p, VALUE str);
77
+ void rb_parser_string_free(rb_parser_t *p, rb_parser_string_t *str);
66
78
 
67
79
  int rb_parser_dvar_defined_ref(struct parser_params*, ID, ID**);
68
80
  ID rb_parser_internal_id(struct parser_params*);
69
81
  int rb_parser_reg_fragment_check(struct parser_params*, rb_parser_string_t*, int);
70
- int rb_reg_named_capture_assign_iter_impl(struct parser_params *p, const char *s, long len, rb_encoding *enc, NODE **succ_block, const rb_code_location_t *loc);
82
+ int rb_reg_named_capture_assign_iter_impl(struct parser_params *p, const char *s, long len, rb_encoding *enc, NODE **succ_block, const rb_code_location_t *loc, rb_parser_assignable_func assignable);
71
83
  int rb_parser_local_defined(struct parser_params *p, ID id, const struct rb_iseq_struct *iseq);
84
+ NODE *rb_parser_assignable(struct parser_params *p, ID id, NODE *val, const YYLTYPE *loc);
72
85
 
73
86
  RUBY_SYMBOL_EXPORT_END
74
87
 
@@ -97,7 +110,7 @@ VALUE rb_ruby_parser_ruby_sourcefile_string(rb_parser_t *p);
97
110
  int rb_ruby_parser_ruby_sourceline(rb_parser_t *p);
98
111
  int rb_ruby_parser_lex_state(rb_parser_t *p);
99
112
  void rb_ruby_ripper_parse0(rb_parser_t *p);
100
- int rb_ruby_ripper_dedent_string(rb_parser_t *p, VALUE string, int width);
113
+ int rb_ruby_ripper_dedent_string(rb_parser_t *p, rb_parser_string_t *string, int width);
101
114
  int rb_ruby_ripper_initialized_p(rb_parser_t *p);
102
115
  void rb_ruby_ripper_parser_initialize(rb_parser_t *p);
103
116
  long rb_ruby_ripper_column(rb_parser_t *p);
@@ -23,6 +23,7 @@ VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additi
23
23
  VALUE rb_callable_receiver(VALUE);
24
24
 
25
25
  VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
26
+ VALUE rb_func_proc_dup(VALUE src_obj);
26
27
  VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
27
28
  VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
28
29
  VALUE rb_sym_to_proc(VALUE sym);
@@ -3,4 +3,8 @@
3
3
 
4
4
  void rb_ractor_ensure_main_ractor(const char *msg);
5
5
 
6
+ RUBY_SYMBOL_EXPORT_BEGIN
7
+ void rb_ractor_setup_belonging(VALUE obj);
8
+ RUBY_SYMBOL_EXPORT_END
9
+
6
10
  #endif /* INTERNAL_RACTOR_H */
@@ -16,7 +16,7 @@
16
16
  #endif
17
17
 
18
18
  #ifdef HAVE_SANITIZER_ASAN_INTERFACE_H
19
- # if __has_feature(address_sanitizer)
19
+ # if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
20
20
  # define RUBY_ASAN_ENABLED
21
21
  # include <sanitizer/asan_interface.h>
22
22
  # endif
@@ -39,6 +39,9 @@
39
39
  #elif defined(RUBY_ASAN_ENABLED)
40
40
  # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
41
41
  __attribute__((__no_sanitize__("address"), __noinline__)) x
42
+ #elif defined(RUBY_MSAN_ENABLED)
43
+ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
44
+ __attribute__((__no_sanitize__("memory"), __noinline__)) x
42
45
  #elif defined(NO_SANITIZE_ADDRESS)
43
46
  # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
44
47
  NO_SANITIZE_ADDRESS(NOINLINE(x))
@@ -54,10 +57,11 @@
54
57
  # include "internal/warnings.h"
55
58
  # undef NO_SANITIZE
56
59
  # define NO_SANITIZE(x, y) \
57
- COMPILER_WARNING_PUSH; \
58
- COMPILER_WARNING_IGNORED(-Wattributes); \
60
+ COMPILER_WARNING_PUSH \
61
+ COMPILER_WARNING_IGNORED(-Wattributes) \
59
62
  __attribute__((__no_sanitize__(x))) y; \
60
- COMPILER_WARNING_POP
63
+ COMPILER_WARNING_POP \
64
+ y
61
65
  #endif
62
66
 
63
67
  #ifndef NO_SANITIZE
@@ -115,26 +119,22 @@ asan_poison_memory_region(const volatile void *ptr, size_t size)
115
119
  __asan_poison_memory_region(ptr, size);
116
120
  }
117
121
 
118
- /**
119
- * This is a variant of asan_poison_memory_region that takes a VALUE.
120
- *
121
- * @param[in] obj target object.
122
- */
123
- static inline void
124
- asan_poison_object(VALUE obj)
125
- {
126
- MAYBE_UNUSED(struct RVALUE *) ptr = (void *)obj;
127
- asan_poison_memory_region(ptr, SIZEOF_VALUE);
128
- }
129
-
130
122
  #ifdef RUBY_ASAN_ENABLED
131
123
  #define asan_poison_object_if(ptr, obj) do { \
132
- if (ptr) asan_poison_object(obj); \
124
+ if (ptr) rb_asan_poison_object(obj); \
133
125
  } while (0)
134
126
  #else
135
127
  #define asan_poison_object_if(ptr, obj) ((void)(ptr), (void)(obj))
136
128
  #endif
137
129
 
130
+ RUBY_SYMBOL_EXPORT_BEGIN
131
+ /**
132
+ * This is a variant of asan_poison_memory_region that takes a VALUE.
133
+ *
134
+ * @param[in] obj target object.
135
+ */
136
+ void rb_asan_poison_object(VALUE obj);
137
+
138
138
  /**
139
139
  * This function predicates if the given object is fully addressable or not.
140
140
  *
@@ -142,12 +142,17 @@ asan_poison_object(VALUE obj)
142
142
  * @retval 0 the given object is fully addressable.
143
143
  * @retval otherwise pointer to first such byte who is poisoned.
144
144
  */
145
- static inline void *
146
- asan_poisoned_object_p(VALUE obj)
147
- {
148
- MAYBE_UNUSED(struct RVALUE *) ptr = (void *)obj;
149
- return __asan_region_is_poisoned(ptr, SIZEOF_VALUE);
150
- }
145
+ void *rb_asan_poisoned_object_p(VALUE obj);
146
+
147
+ /**
148
+ * This is a variant of asan_unpoison_memory_region that takes a VALUE.
149
+ *
150
+ * @param[in] obj target object.
151
+ * @param[in] malloc_p if the memory region is like a malloc's return value or not.
152
+ */
153
+ void rb_asan_unpoison_object(VALUE obj, bool newobj_p);
154
+
155
+ RUBY_SYMBOL_EXPORT_END
151
156
 
152
157
  /**
153
158
  * This function asserts that a (formally poisoned) memory region from ptr to
@@ -176,24 +181,11 @@ asan_unpoison_memory_region(const volatile void *ptr, size_t size, bool malloc_p
176
181
  }
177
182
  }
178
183
 
179
- /**
180
- * This is a variant of asan_unpoison_memory_region that takes a VALUE.
181
- *
182
- * @param[in] obj target object.
183
- * @param[in] malloc_p if the memory region is like a malloc's return value or not.
184
- */
185
- static inline void
186
- asan_unpoison_object(VALUE obj, bool newobj_p)
187
- {
188
- MAYBE_UNUSED(struct RVALUE *) ptr = (void *)obj;
189
- asan_unpoison_memory_region(ptr, SIZEOF_VALUE, newobj_p);
190
- }
191
-
192
184
  static inline void *
193
185
  asan_unpoison_object_temporary(VALUE obj)
194
186
  {
195
- void *ptr = asan_poisoned_object_p(obj);
196
- asan_unpoison_object(obj, false);
187
+ void *ptr = rb_asan_poisoned_object_p(obj);
188
+ rb_asan_unpoison_object(obj, false);
197
189
  return ptr;
198
190
  }
199
191
 
@@ -201,11 +193,40 @@ static inline void *
201
193
  asan_poison_object_restore(VALUE obj, void *ptr)
202
194
  {
203
195
  if (ptr) {
204
- asan_poison_object(obj);
196
+ rb_asan_poison_object(obj);
197
+ }
198
+ return NULL;
199
+ }
200
+
201
+ #define asan_unpoisoning_object(obj) \
202
+ for (void *poisoned = asan_unpoison_object_temporary(obj), \
203
+ *unpoisoning = &poisoned; /* flag to loop just once */ \
204
+ unpoisoning; \
205
+ unpoisoning = asan_poison_object_restore(obj, poisoned))
206
+
207
+
208
+ static inline void *
209
+ asan_unpoison_memory_region_temporary(void *ptr, size_t len)
210
+ {
211
+ void *poisoned_ptr = __asan_region_is_poisoned(ptr, len);
212
+ asan_unpoison_memory_region(ptr, len, false);
213
+ return poisoned_ptr;
214
+ }
215
+
216
+ static inline void *
217
+ asan_poison_memory_region_restore(void *ptr, size_t len, void *poisoned_ptr)
218
+ {
219
+ if (poisoned_ptr) {
220
+ asan_poison_memory_region(ptr, len);
205
221
  }
206
222
  return NULL;
207
223
  }
208
224
 
225
+ #define asan_unpoisoning_memory_region(ptr, len) \
226
+ for (void *poisoned = asan_unpoison_memory_region_temporary(ptr, len), \
227
+ *unpoisoning = &poisoned; /* flag to loop just once */ \
228
+ unpoisoning; \
229
+ unpoisoning = asan_poison_memory_region_restore(ptr, len, poisoned))
209
230
 
210
231
  /**
211
232
  * Checks if the given pointer is on an ASAN fake stack. If so, it returns the