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
@@ -1220,52 +1220,6 @@ INSN_ENTRY(newarray)
1220
1220
  END_INSN(newarray);
1221
1221
  }
1222
1222
 
1223
- /* insn newarraykwsplat(num)(...)(val) */
1224
- INSN_ENTRY(newarraykwsplat)
1225
- {
1226
- /* ### Declare that we have just entered into an instruction. ### */
1227
- START_OF_ORIGINAL_INSN(newarraykwsplat);
1228
- DEBUG_ENTER_INSN("newarraykwsplat");
1229
-
1230
- /* ### Declare and assign variables. ### */
1231
- rb_num_t num = (rb_num_t)GET_OPERAND(1);
1232
- # define INSN_ATTR(x) attr_ ## x ## _newarraykwsplat(num)
1233
- const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1234
- VALUE val;
1235
-
1236
- /* ### Instruction preambles. ### */
1237
- ADD_PC(INSN_ATTR(width));
1238
- SETUP_CANARY(leaf);
1239
- COLLECT_USAGE_INSN(INSN_ATTR(bin));
1240
- COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1241
-
1242
- /* ### Here we do the instruction body. ### */
1243
- # define NAME_OF_CURRENT_INSN newarraykwsplat
1244
- # line 466 "insns.def"
1245
- {
1246
- if (RHASH_EMPTY_P(*STACK_ADDR_FROM_TOP(1))) {
1247
- val = rb_ary_new4(num-1, STACK_ADDR_FROM_TOP(num));
1248
- }
1249
- else {
1250
- val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
1251
- }
1252
- }
1253
- # line 1254 "vm.inc"
1254
- # undef NAME_OF_CURRENT_INSN
1255
-
1256
- /* ### Instruction trailers. ### */
1257
- CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1258
- CHECK_CANARY(leaf, INSN_ATTR(bin));
1259
- INC_SP(INSN_ATTR(sp_inc));
1260
- TOPN(0) = val;
1261
- VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1262
- VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1263
- # undef INSN_ATTR
1264
-
1265
- /* ### Leave the instruction. ### */
1266
- END_INSN(newarraykwsplat);
1267
- }
1268
-
1269
1223
  /* insn pushtoarraykwsplat()(ary, hash)(ary) */
1270
1224
  INSN_ENTRY(pushtoarraykwsplat)
1271
1225
  {
@@ -1286,13 +1240,13 @@ INSN_ENTRY(pushtoarraykwsplat)
1286
1240
 
1287
1241
  /* ### Here we do the instruction body. ### */
1288
1242
  # define NAME_OF_CURRENT_INSN pushtoarraykwsplat
1289
- # line 483 "insns.def"
1243
+ # line 463 "insns.def"
1290
1244
  {
1291
1245
  if (!RHASH_EMPTY_P(hash)) {
1292
1246
  rb_ary_push(ary, hash);
1293
1247
  }
1294
1248
  }
1295
- # line 1296 "vm.inc"
1249
+ # line 1250 "vm.inc"
1296
1250
  # undef NAME_OF_CURRENT_INSN
1297
1251
 
1298
1252
  /* ### Instruction trailers. ### */
@@ -1329,12 +1283,12 @@ INSN_ENTRY(duparray)
1329
1283
 
1330
1284
  /* ### Here we do the instruction body. ### */
1331
1285
  # define NAME_OF_CURRENT_INSN duparray
1332
- # line 495 "insns.def"
1286
+ # line 475 "insns.def"
1333
1287
  {
1334
1288
  RUBY_DTRACE_CREATE_HOOK(ARRAY, RARRAY_LEN(ary));
1335
1289
  val = rb_ary_resurrect(ary);
1336
1290
  }
1337
- # line 1338 "vm.inc"
1291
+ # line 1292 "vm.inc"
1338
1292
  # undef NAME_OF_CURRENT_INSN
1339
1293
 
1340
1294
  /* ### Instruction trailers. ### */
@@ -1371,12 +1325,12 @@ INSN_ENTRY(duphash)
1371
1325
 
1372
1326
  /* ### Here we do the instruction body. ### */
1373
1327
  # define NAME_OF_CURRENT_INSN duphash
1374
- # line 506 "insns.def"
1328
+ # line 486 "insns.def"
1375
1329
  {
1376
1330
  RUBY_DTRACE_CREATE_HOOK(HASH, RHASH_SIZE(hash) << 1);
1377
1331
  val = rb_hash_resurrect(hash);
1378
1332
  }
1379
- # line 1380 "vm.inc"
1333
+ # line 1334 "vm.inc"
1380
1334
  # undef NAME_OF_CURRENT_INSN
1381
1335
 
1382
1336
  /* ### Instruction trailers. ### */
@@ -1415,11 +1369,11 @@ INSN_ENTRY(expandarray)
1415
1369
 
1416
1370
  /* ### Here we do the instruction body. ### */
1417
1371
  # define NAME_OF_CURRENT_INSN expandarray
1418
- # line 528 "insns.def"
1372
+ # line 508 "insns.def"
1419
1373
  {
1420
1374
  vm_expandarray(GET_CFP(), ary, num, (int)flag);
1421
1375
  }
1422
- # line 1423 "vm.inc"
1376
+ # line 1377 "vm.inc"
1423
1377
  # undef NAME_OF_CURRENT_INSN
1424
1378
 
1425
1379
  /* ### Instruction trailers. ### */
@@ -1451,11 +1405,11 @@ INSN_ENTRY(concatarray)
1451
1405
 
1452
1406
  /* ### Here we do the instruction body. ### */
1453
1407
  # define NAME_OF_CURRENT_INSN concatarray
1454
- # line 541 "insns.def"
1408
+ # line 521 "insns.def"
1455
1409
  {
1456
1410
  ary = vm_concat_array(ary1, ary2);
1457
1411
  }
1458
- # line 1459 "vm.inc"
1412
+ # line 1413 "vm.inc"
1459
1413
  # undef NAME_OF_CURRENT_INSN
1460
1414
 
1461
1415
  /* ### Instruction trailers. ### */
@@ -1492,11 +1446,11 @@ INSN_ENTRY(concattoarray)
1492
1446
 
1493
1447
  /* ### Here we do the instruction body. ### */
1494
1448
  # define NAME_OF_CURRENT_INSN concattoarray
1495
- # line 555 "insns.def"
1449
+ # line 535 "insns.def"
1496
1450
  {
1497
1451
  ary = vm_concat_to_array(ary1, ary2);
1498
1452
  }
1499
- # line 1500 "vm.inc"
1453
+ # line 1454 "vm.inc"
1500
1454
  # undef NAME_OF_CURRENT_INSN
1501
1455
 
1502
1456
  /* ### Instruction trailers. ### */
@@ -1533,12 +1487,12 @@ INSN_ENTRY(pushtoarray)
1533
1487
 
1534
1488
  /* ### Here we do the instruction body. ### */
1535
1489
  # define NAME_OF_CURRENT_INSN pushtoarray
1536
- # line 566 "insns.def"
1490
+ # line 546 "insns.def"
1537
1491
  {
1538
1492
  const VALUE *objp = STACK_ADDR_FROM_TOP(num);
1539
1493
  val = rb_ary_cat(*(objp-1), objp, num);
1540
1494
  }
1541
- # line 1542 "vm.inc"
1495
+ # line 1496 "vm.inc"
1542
1496
  # undef NAME_OF_CURRENT_INSN
1543
1497
 
1544
1498
  /* ### Instruction trailers. ### */
@@ -1576,11 +1530,11 @@ INSN_ENTRY(splatarray)
1576
1530
 
1577
1531
  /* ### Here we do the instruction body. ### */
1578
1532
  # define NAME_OF_CURRENT_INSN splatarray
1579
- # line 578 "insns.def"
1533
+ # line 558 "insns.def"
1580
1534
  {
1581
1535
  obj = vm_splat_array(flag, ary);
1582
1536
  }
1583
- # line 1584 "vm.inc"
1537
+ # line 1538 "vm.inc"
1584
1538
  # undef NAME_OF_CURRENT_INSN
1585
1539
 
1586
1540
  /* ### Instruction trailers. ### */
@@ -1617,7 +1571,7 @@ INSN_ENTRY(splatkw)
1617
1571
 
1618
1572
  /* ### Here we do the instruction body. ### */
1619
1573
  # define NAME_OF_CURRENT_INSN splatkw
1620
- # line 589 "insns.def"
1574
+ # line 569 "insns.def"
1621
1575
  {
1622
1576
  if (NIL_P(hash)) {
1623
1577
  obj = Qnil;
@@ -1626,7 +1580,7 @@ INSN_ENTRY(splatkw)
1626
1580
  obj = rb_to_hash_type(hash);
1627
1581
  }
1628
1582
  }
1629
- # line 1630 "vm.inc"
1583
+ # line 1584 "vm.inc"
1630
1584
  # undef NAME_OF_CURRENT_INSN
1631
1585
 
1632
1586
  /* ### Instruction trailers. ### */
@@ -1666,7 +1620,7 @@ INSN_ENTRY(newhash)
1666
1620
 
1667
1621
  /* ### Here we do the instruction body. ### */
1668
1622
  # define NAME_OF_CURRENT_INSN newhash
1669
- # line 606 "insns.def"
1623
+ # line 586 "insns.def"
1670
1624
  {
1671
1625
  RUBY_DTRACE_CREATE_HOOK(HASH, num);
1672
1626
 
@@ -1678,7 +1632,7 @@ INSN_ENTRY(newhash)
1678
1632
  val = rb_hash_new();
1679
1633
  }
1680
1634
  }
1681
- # line 1682 "vm.inc"
1635
+ # line 1636 "vm.inc"
1682
1636
  # undef NAME_OF_CURRENT_INSN
1683
1637
 
1684
1638
  /* ### Instruction trailers. ### */
@@ -1717,11 +1671,11 @@ INSN_ENTRY(newrange)
1717
1671
 
1718
1672
  /* ### Here we do the instruction body. ### */
1719
1673
  # define NAME_OF_CURRENT_INSN newrange
1720
- # line 626 "insns.def"
1674
+ # line 606 "insns.def"
1721
1675
  {
1722
1676
  val = rb_range_new(low, high, (int)flag);
1723
1677
  }
1724
- # line 1725 "vm.inc"
1678
+ # line 1679 "vm.inc"
1725
1679
  # undef NAME_OF_CURRENT_INSN
1726
1680
 
1727
1681
  /* ### Instruction trailers. ### */
@@ -1756,12 +1710,12 @@ INSN_ENTRY(pop)
1756
1710
 
1757
1711
  /* ### Here we do the instruction body. ### */
1758
1712
  # define NAME_OF_CURRENT_INSN pop
1759
- # line 640 "insns.def"
1713
+ # line 620 "insns.def"
1760
1714
  {
1761
1715
  (void)val;
1762
1716
  /* none */
1763
1717
  }
1764
- # line 1765 "vm.inc"
1718
+ # line 1719 "vm.inc"
1765
1719
  # undef NAME_OF_CURRENT_INSN
1766
1720
 
1767
1721
  /* ### Instruction trailers. ### */
@@ -1795,11 +1749,11 @@ INSN_ENTRY(dup)
1795
1749
 
1796
1750
  /* ### Here we do the instruction body. ### */
1797
1751
  # define NAME_OF_CURRENT_INSN dup
1798
- # line 651 "insns.def"
1752
+ # line 631 "insns.def"
1799
1753
  {
1800
1754
  val1 = val2 = val;
1801
1755
  }
1802
- # line 1803 "vm.inc"
1756
+ # line 1757 "vm.inc"
1803
1757
  # undef NAME_OF_CURRENT_INSN
1804
1758
 
1805
1759
  /* ### Instruction trailers. ### */
@@ -1837,14 +1791,14 @@ INSN_ENTRY(dupn)
1837
1791
 
1838
1792
  /* ### Here we do the instruction body. ### */
1839
1793
  # define NAME_OF_CURRENT_INSN dupn
1840
- # line 662 "insns.def"
1794
+ # line 642 "insns.def"
1841
1795
  {
1842
1796
  void *dst = GET_SP();
1843
1797
  void *src = STACK_ADDR_FROM_TOP(n);
1844
1798
 
1845
1799
  MEMCPY(dst, src, VALUE, n);
1846
1800
  }
1847
- # line 1848 "vm.inc"
1801
+ # line 1802 "vm.inc"
1848
1802
  # undef NAME_OF_CURRENT_INSN
1849
1803
 
1850
1804
  /* ### Instruction trailers. ### */
@@ -1907,7 +1861,7 @@ INSN_ENTRY(opt_reverse)
1907
1861
 
1908
1862
  /* ### Here we do the instruction body. ### */
1909
1863
  # define NAME_OF_CURRENT_INSN opt_reverse
1910
- # line 686 "insns.def"
1864
+ # line 666 "insns.def"
1911
1865
  {
1912
1866
  rb_num_t i;
1913
1867
  VALUE *sp = STACK_ADDR_FROM_TOP(n);
@@ -1919,7 +1873,7 @@ INSN_ENTRY(opt_reverse)
1919
1873
  TOPN(i) = v0;
1920
1874
  }
1921
1875
  }
1922
- # line 1923 "vm.inc"
1876
+ # line 1877 "vm.inc"
1923
1877
  # undef NAME_OF_CURRENT_INSN
1924
1878
 
1925
1879
  /* ### Instruction trailers. ### */
@@ -1952,11 +1906,11 @@ INSN_ENTRY(topn)
1952
1906
 
1953
1907
  /* ### Here we do the instruction body. ### */
1954
1908
  # define NAME_OF_CURRENT_INSN topn
1955
- # line 716 "insns.def"
1909
+ # line 696 "insns.def"
1956
1910
  {
1957
1911
  val = TOPN(n);
1958
1912
  }
1959
- # line 1960 "vm.inc"
1913
+ # line 1914 "vm.inc"
1960
1914
  # undef NAME_OF_CURRENT_INSN
1961
1915
 
1962
1916
  /* ### Instruction trailers. ### */
@@ -1993,11 +1947,11 @@ INSN_ENTRY(setn)
1993
1947
 
1994
1948
  /* ### Here we do the instruction body. ### */
1995
1949
  # define NAME_OF_CURRENT_INSN setn
1996
- # line 727 "insns.def"
1950
+ # line 707 "insns.def"
1997
1951
  {
1998
1952
  TOPN(n) = val;
1999
1953
  }
2000
- # line 2001 "vm.inc"
1954
+ # line 1955 "vm.inc"
2001
1955
  # undef NAME_OF_CURRENT_INSN
2002
1956
 
2003
1957
  /* ### Instruction trailers. ### */
@@ -2065,14 +2019,14 @@ INSN_ENTRY(defined)
2065
2019
 
2066
2020
  /* ### Here we do the instruction body. ### */
2067
2021
  # define NAME_OF_CURRENT_INSN defined
2068
- # line 753 "insns.def"
2022
+ # line 733 "insns.def"
2069
2023
  {
2070
2024
  val = Qnil;
2071
2025
  if (vm_defined(ec, GET_CFP(), op_type, obj, v)) {
2072
2026
  val = pushval;
2073
2027
  }
2074
2028
  }
2075
- # line 2076 "vm.inc"
2029
+ # line 2030 "vm.inc"
2076
2030
  # undef NAME_OF_CURRENT_INSN
2077
2031
 
2078
2032
  /* ### Instruction trailers. ### */
@@ -2113,14 +2067,14 @@ INSN_ENTRY(definedivar)
2113
2067
 
2114
2068
  /* ### Here we do the instruction body. ### */
2115
2069
  # define NAME_OF_CURRENT_INSN definedivar
2116
- # line 767 "insns.def"
2070
+ # line 747 "insns.def"
2117
2071
  {
2118
2072
  val = Qnil;
2119
2073
  if (!UNDEF_P(vm_getivar(GET_SELF(), id, GET_ISEQ(), ic, NULL, FALSE, Qundef))) {
2120
2074
  val = pushval;
2121
2075
  }
2122
2076
  }
2123
- # line 2124 "vm.inc"
2077
+ # line 2078 "vm.inc"
2124
2078
  # undef NAME_OF_CURRENT_INSN
2125
2079
 
2126
2080
  /* ### Instruction trailers. ### */
@@ -2159,11 +2113,11 @@ INSN_ENTRY(checkmatch)
2159
2113
 
2160
2114
  /* ### Here we do the instruction body. ### */
2161
2115
  # define NAME_OF_CURRENT_INSN checkmatch
2162
- # line 787 "insns.def"
2116
+ # line 767 "insns.def"
2163
2117
  {
2164
2118
  result = vm_check_match(ec, target, pattern, flag);
2165
2119
  }
2166
- # line 2167 "vm.inc"
2120
+ # line 2121 "vm.inc"
2167
2121
  # undef NAME_OF_CURRENT_INSN
2168
2122
 
2169
2123
  /* ### Instruction trailers. ### */
@@ -2202,11 +2156,11 @@ INSN_ENTRY(checkkeyword)
2202
2156
 
2203
2157
  /* ### Here we do the instruction body. ### */
2204
2158
  # define NAME_OF_CURRENT_INSN checkkeyword
2205
- # line 797 "insns.def"
2159
+ # line 777 "insns.def"
2206
2160
  {
2207
2161
  ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP());
2208
2162
  }
2209
- # line 2210 "vm.inc"
2163
+ # line 2164 "vm.inc"
2210
2164
  # undef NAME_OF_CURRENT_INSN
2211
2165
 
2212
2166
  /* ### Instruction trailers. ### */
@@ -2244,11 +2198,11 @@ INSN_ENTRY(checktype)
2244
2198
 
2245
2199
  /* ### Here we do the instruction body. ### */
2246
2200
  # define NAME_OF_CURRENT_INSN checktype
2247
- # line 807 "insns.def"
2201
+ # line 787 "insns.def"
2248
2202
  {
2249
2203
  ret = RBOOL(TYPE(val) == (int)type);
2250
2204
  }
2251
- # line 2252 "vm.inc"
2205
+ # line 2206 "vm.inc"
2252
2206
  # undef NAME_OF_CURRENT_INSN
2253
2207
 
2254
2208
  /* ### Instruction trailers. ### */
@@ -2292,7 +2246,7 @@ INSN_ENTRY(defineclass)
2292
2246
 
2293
2247
  /* ### Here we do the instruction body. ### */
2294
2248
  # define NAME_OF_CURRENT_INSN defineclass
2295
- # line 823 "insns.def"
2249
+ # line 803 "insns.def"
2296
2250
  {
2297
2251
  VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super);
2298
2252
 
@@ -2308,7 +2262,7 @@ INSN_ENTRY(defineclass)
2308
2262
  RESTORE_REGS();
2309
2263
  NEXT_INSN();
2310
2264
  }
2311
- # line 2312 "vm.inc"
2265
+ # line 2266 "vm.inc"
2312
2266
  # undef NAME_OF_CURRENT_INSN
2313
2267
 
2314
2268
  /* ### Instruction trailers. ### */
@@ -2344,11 +2298,11 @@ INSN_ENTRY(definemethod)
2344
2298
 
2345
2299
  /* ### Here we do the instruction body. ### */
2346
2300
  # define NAME_OF_CURRENT_INSN definemethod
2347
- # line 844 "insns.def"
2301
+ # line 824 "insns.def"
2348
2302
  {
2349
2303
  vm_define_method(ec, Qnil, id, (VALUE)iseq, FALSE);
2350
2304
  }
2351
- # line 2352 "vm.inc"
2305
+ # line 2306 "vm.inc"
2352
2306
  # undef NAME_OF_CURRENT_INSN
2353
2307
 
2354
2308
  /* ### Instruction trailers. ### */
@@ -2384,11 +2338,11 @@ INSN_ENTRY(definesmethod)
2384
2338
 
2385
2339
  /* ### Here we do the instruction body. ### */
2386
2340
  # define NAME_OF_CURRENT_INSN definesmethod
2387
- # line 853 "insns.def"
2341
+ # line 833 "insns.def"
2388
2342
  {
2389
2343
  vm_define_method(ec, obj, id, (VALUE)iseq, TRUE);
2390
2344
  }
2391
- # line 2392 "vm.inc"
2345
+ # line 2346 "vm.inc"
2392
2346
  # undef NAME_OF_CURRENT_INSN
2393
2347
 
2394
2348
  /* ### Instruction trailers. ### */
@@ -2424,7 +2378,7 @@ INSN_ENTRY(send)
2424
2378
 
2425
2379
  /* ### Here we do the instruction body. ### */
2426
2380
  # define NAME_OF_CURRENT_INSN send
2427
- # line 869 "insns.def"
2381
+ # line 849 "insns.def"
2428
2382
  {
2429
2383
  VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false);
2430
2384
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
@@ -2435,7 +2389,7 @@ INSN_ENTRY(send)
2435
2389
  NEXT_INSN();
2436
2390
  }
2437
2391
  }
2438
- # line 2439 "vm.inc"
2392
+ # line 2393 "vm.inc"
2439
2393
  # undef NAME_OF_CURRENT_INSN
2440
2394
 
2441
2395
  /* ### Instruction trailers. ### */
@@ -2448,6 +2402,62 @@ INSN_ENTRY(send)
2448
2402
  END_INSN(send);
2449
2403
  }
2450
2404
 
2405
+ /* insn sendforward(cd, blockiseq)(...)(val) */
2406
+ INSN_ENTRY(sendforward)
2407
+ {
2408
+ /* ### Declare that we have just entered into an instruction. ### */
2409
+ START_OF_ORIGINAL_INSN(sendforward);
2410
+ DEBUG_ENTER_INSN("sendforward");
2411
+
2412
+ /* ### Declare and assign variables. ### */
2413
+ CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2414
+ ISEQ blockiseq = (ISEQ)GET_OPERAND(2);
2415
+ # define INSN_ATTR(x) attr_ ## x ## _sendforward(cd, blockiseq)
2416
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2417
+ VALUE val;
2418
+
2419
+ /* ### Instruction preambles. ### */
2420
+ ADD_PC(INSN_ATTR(width));
2421
+ POPN(INSN_ATTR(popn));
2422
+ SETUP_CANARY(leaf);
2423
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2424
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2425
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, blockiseq);
2426
+
2427
+ /* ### Here we do the instruction body. ### */
2428
+ # define NAME_OF_CURRENT_INSN sendforward
2429
+ # line 868 "insns.def"
2430
+ {
2431
+ struct rb_forwarding_call_data adjusted_cd;
2432
+ struct rb_callinfo adjusted_ci;
2433
+
2434
+ VALUE bh = vm_caller_setup_fwd_args(GET_EC(), GET_CFP(), cd, blockiseq, 0, &adjusted_cd, &adjusted_ci);
2435
+
2436
+ val = vm_sendish(ec, GET_CFP(), &adjusted_cd.cd, bh, mexp_search_method);
2437
+ JIT_EXEC(ec, val);
2438
+
2439
+ if (cd->cc != adjusted_cd.cd.cc && vm_cc_markable(adjusted_cd.cd.cc)) {
2440
+ RB_OBJ_WRITE(GET_ISEQ(), &cd->cc, adjusted_cd.cd.cc);
2441
+ }
2442
+
2443
+ if (UNDEF_P(val)) {
2444
+ RESTORE_REGS();
2445
+ NEXT_INSN();
2446
+ }
2447
+ }
2448
+ # line 2449 "vm.inc"
2449
+ # undef NAME_OF_CURRENT_INSN
2450
+
2451
+ /* ### Instruction trailers. ### */
2452
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2453
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2454
+ PUSH(val);
2455
+ # undef INSN_ATTR
2456
+
2457
+ /* ### Leave the instruction. ### */
2458
+ END_INSN(sendforward);
2459
+ }
2460
+
2451
2461
  /* insn opt_send_without_block(cd)(...)(val) */
2452
2462
  INSN_ENTRY(opt_send_without_block)
2453
2463
  {
@@ -2470,7 +2480,7 @@ INSN_ENTRY(opt_send_without_block)
2470
2480
 
2471
2481
  /* ### Here we do the instruction body. ### */
2472
2482
  # define NAME_OF_CURRENT_INSN opt_send_without_block
2473
- # line 889 "insns.def"
2483
+ # line 896 "insns.def"
2474
2484
  {
2475
2485
  VALUE bh = VM_BLOCK_HANDLER_NONE;
2476
2486
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
@@ -2481,7 +2491,7 @@ INSN_ENTRY(opt_send_without_block)
2481
2491
  NEXT_INSN();
2482
2492
  }
2483
2493
  }
2484
- # line 2485 "vm.inc"
2494
+ # line 2495 "vm.inc"
2485
2495
  # undef NAME_OF_CURRENT_INSN
2486
2496
 
2487
2497
  /* ### Instruction trailers. ### */
@@ -2516,7 +2526,7 @@ INSN_ENTRY(objtostring)
2516
2526
 
2517
2527
  /* ### Here we do the instruction body. ### */
2518
2528
  # define NAME_OF_CURRENT_INSN objtostring
2519
- # line 907 "insns.def"
2529
+ # line 914 "insns.def"
2520
2530
  {
2521
2531
  val = vm_objtostring(GET_ISEQ(), recv, cd);
2522
2532
 
@@ -2524,7 +2534,7 @@ INSN_ENTRY(objtostring)
2524
2534
  CALL_SIMPLE_METHOD();
2525
2535
  }
2526
2536
  }
2527
- # line 2528 "vm.inc"
2537
+ # line 2538 "vm.inc"
2528
2538
  # undef NAME_OF_CURRENT_INSN
2529
2539
 
2530
2540
  /* ### Instruction trailers. ### */
@@ -2540,6 +2550,104 @@ INSN_ENTRY(objtostring)
2540
2550
  END_INSN(objtostring);
2541
2551
  }
2542
2552
 
2553
+ /* insn opt_ary_freeze(ary, cd)()(val) */
2554
+ INSN_ENTRY(opt_ary_freeze)
2555
+ {
2556
+ /* ### Declare that we have just entered into an instruction. ### */
2557
+ START_OF_ORIGINAL_INSN(opt_ary_freeze);
2558
+ DEBUG_ENTER_INSN("opt_ary_freeze");
2559
+
2560
+ /* ### Declare and assign variables. ### */
2561
+ VALUE ary = (VALUE)GET_OPERAND(1);
2562
+ CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
2563
+ # define INSN_ATTR(x) attr_ ## x ## _opt_ary_freeze(ary, cd)
2564
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2565
+ VALUE val;
2566
+
2567
+ /* ### Instruction preambles. ### */
2568
+ ADD_PC(INSN_ATTR(width));
2569
+ SETUP_CANARY(leaf);
2570
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2571
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ary);
2572
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
2573
+
2574
+ /* ### Here we do the instruction body. ### */
2575
+ # define NAME_OF_CURRENT_INSN opt_ary_freeze
2576
+ # line 927 "insns.def"
2577
+ {
2578
+ val = vm_opt_ary_freeze(ary, BOP_FREEZE, idFreeze);
2579
+
2580
+ if (UNDEF_P(val)) {
2581
+ RUBY_DTRACE_CREATE_HOOK(ARRAY, RARRAY_LEN(ary));
2582
+ PUSH(rb_ary_resurrect(ary));
2583
+ CALL_SIMPLE_METHOD();
2584
+ }
2585
+ }
2586
+ # line 2587 "vm.inc"
2587
+ # undef NAME_OF_CURRENT_INSN
2588
+
2589
+ /* ### Instruction trailers. ### */
2590
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2591
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2592
+ INC_SP(INSN_ATTR(sp_inc));
2593
+ TOPN(0) = val;
2594
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2595
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2596
+ # undef INSN_ATTR
2597
+
2598
+ /* ### Leave the instruction. ### */
2599
+ END_INSN(opt_ary_freeze);
2600
+ }
2601
+
2602
+ /* insn opt_hash_freeze(hash, cd)()(val) */
2603
+ INSN_ENTRY(opt_hash_freeze)
2604
+ {
2605
+ /* ### Declare that we have just entered into an instruction. ### */
2606
+ START_OF_ORIGINAL_INSN(opt_hash_freeze);
2607
+ DEBUG_ENTER_INSN("opt_hash_freeze");
2608
+
2609
+ /* ### Declare and assign variables. ### */
2610
+ VALUE hash = (VALUE)GET_OPERAND(1);
2611
+ CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
2612
+ # define INSN_ATTR(x) attr_ ## x ## _opt_hash_freeze(hash, cd)
2613
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2614
+ VALUE val;
2615
+
2616
+ /* ### Instruction preambles. ### */
2617
+ ADD_PC(INSN_ATTR(width));
2618
+ SETUP_CANARY(leaf);
2619
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2620
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
2621
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
2622
+
2623
+ /* ### Here we do the instruction body. ### */
2624
+ # define NAME_OF_CURRENT_INSN opt_hash_freeze
2625
+ # line 942 "insns.def"
2626
+ {
2627
+ val = vm_opt_hash_freeze(hash, BOP_FREEZE, idFreeze);
2628
+
2629
+ if (UNDEF_P(val)) {
2630
+ RUBY_DTRACE_CREATE_HOOK(HASH, RHASH_SIZE(hash) << 1);
2631
+ PUSH(rb_hash_resurrect(hash));
2632
+ CALL_SIMPLE_METHOD();
2633
+ }
2634
+ }
2635
+ # line 2636 "vm.inc"
2636
+ # undef NAME_OF_CURRENT_INSN
2637
+
2638
+ /* ### Instruction trailers. ### */
2639
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2640
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2641
+ INC_SP(INSN_ATTR(sp_inc));
2642
+ TOPN(0) = val;
2643
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2644
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2645
+ # undef INSN_ATTR
2646
+
2647
+ /* ### Leave the instruction. ### */
2648
+ END_INSN(opt_hash_freeze);
2649
+ }
2650
+
2543
2651
  /* insn opt_str_freeze(str, cd)()(val) */
2544
2652
  INSN_ENTRY(opt_str_freeze)
2545
2653
  {
@@ -2563,7 +2671,7 @@ INSN_ENTRY(opt_str_freeze)
2563
2671
 
2564
2672
  /* ### Here we do the instruction body. ### */
2565
2673
  # define NAME_OF_CURRENT_INSN opt_str_freeze
2566
- # line 920 "insns.def"
2674
+ # line 957 "insns.def"
2567
2675
  {
2568
2676
  val = vm_opt_str_freeze(str, BOP_FREEZE, idFreeze);
2569
2677
 
@@ -2572,7 +2680,7 @@ INSN_ENTRY(opt_str_freeze)
2572
2680
  CALL_SIMPLE_METHOD();
2573
2681
  }
2574
2682
  }
2575
- # line 2576 "vm.inc"
2683
+ # line 2684 "vm.inc"
2576
2684
  # undef NAME_OF_CURRENT_INSN
2577
2685
 
2578
2686
  /* ### Instruction trailers. ### */
@@ -2610,7 +2718,7 @@ INSN_ENTRY(opt_nil_p)
2610
2718
 
2611
2719
  /* ### Here we do the instruction body. ### */
2612
2720
  # define NAME_OF_CURRENT_INSN opt_nil_p
2613
- # line 935 "insns.def"
2721
+ # line 972 "insns.def"
2614
2722
  {
2615
2723
  val = vm_opt_nil_p(GET_ISEQ(), cd, recv);
2616
2724
 
@@ -2618,7 +2726,7 @@ INSN_ENTRY(opt_nil_p)
2618
2726
  CALL_SIMPLE_METHOD();
2619
2727
  }
2620
2728
  }
2621
- # line 2622 "vm.inc"
2729
+ # line 2730 "vm.inc"
2622
2730
  # undef NAME_OF_CURRENT_INSN
2623
2731
 
2624
2732
  /* ### Instruction trailers. ### */
@@ -2657,7 +2765,7 @@ INSN_ENTRY(opt_str_uminus)
2657
2765
 
2658
2766
  /* ### Here we do the instruction body. ### */
2659
2767
  # define NAME_OF_CURRENT_INSN opt_str_uminus
2660
- # line 948 "insns.def"
2768
+ # line 985 "insns.def"
2661
2769
  {
2662
2770
  val = vm_opt_str_freeze(str, BOP_UMINUS, idUMinus);
2663
2771
 
@@ -2666,7 +2774,7 @@ INSN_ENTRY(opt_str_uminus)
2666
2774
  CALL_SIMPLE_METHOD();
2667
2775
  }
2668
2776
  }
2669
- # line 2670 "vm.inc"
2777
+ # line 2778 "vm.inc"
2670
2778
  # undef NAME_OF_CURRENT_INSN
2671
2779
 
2672
2780
  /* ### Instruction trailers. ### */
@@ -2682,6 +2790,57 @@ INSN_ENTRY(opt_str_uminus)
2682
2790
  END_INSN(opt_str_uminus);
2683
2791
  }
2684
2792
 
2793
+ /* insn opt_duparray_send(ary, method, argc)(...)(val) */
2794
+ INSN_ENTRY(opt_duparray_send)
2795
+ {
2796
+ /* ### Declare that we have just entered into an instruction. ### */
2797
+ START_OF_ORIGINAL_INSN(opt_duparray_send);
2798
+ DEBUG_ENTER_INSN("opt_duparray_send");
2799
+
2800
+ /* ### Declare and assign variables. ### */
2801
+ VALUE ary = (VALUE)GET_OPERAND(1);
2802
+ ID method = (ID)GET_OPERAND(2);
2803
+ rb_num_t argc = (rb_num_t)GET_OPERAND(3);
2804
+ # define INSN_ATTR(x) attr_ ## x ## _opt_duparray_send(ary, method, argc)
2805
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2806
+ VALUE val;
2807
+
2808
+ /* ### Instruction preambles. ### */
2809
+ ADD_PC(INSN_ATTR(width));
2810
+ SETUP_CANARY(leaf);
2811
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2812
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ary);
2813
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, method);
2814
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, argc);
2815
+
2816
+ /* ### Here we do the instruction body. ### */
2817
+ # define NAME_OF_CURRENT_INSN opt_duparray_send
2818
+ # line 1006 "insns.def"
2819
+ {
2820
+ switch(method) {
2821
+ case idIncludeP:
2822
+ val = vm_opt_duparray_include_p(ec, ary, TOPN(0));
2823
+ break;
2824
+ default:
2825
+ rb_bug("unreachable");
2826
+ }
2827
+ }
2828
+ # line 2829 "vm.inc"
2829
+ # undef NAME_OF_CURRENT_INSN
2830
+
2831
+ /* ### Instruction trailers. ### */
2832
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2833
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2834
+ INC_SP(INSN_ATTR(sp_inc));
2835
+ TOPN(0) = val;
2836
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2837
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2838
+ # undef INSN_ATTR
2839
+
2840
+ /* ### Leave the instruction. ### */
2841
+ END_INSN(opt_duparray_send);
2842
+ }
2843
+
2685
2844
  /* insn opt_newarray_send(num, method)(...)(val) */
2686
2845
  INSN_ENTRY(opt_newarray_send)
2687
2846
  {
@@ -2691,7 +2850,7 @@ INSN_ENTRY(opt_newarray_send)
2691
2850
 
2692
2851
  /* ### Declare and assign variables. ### */
2693
2852
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
2694
- ID method = (ID)GET_OPERAND(2);
2853
+ rb_num_t method = (rb_num_t)GET_OPERAND(2);
2695
2854
  # define INSN_ATTR(x) attr_ ## x ## _opt_newarray_send(num, method)
2696
2855
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2697
2856
  VALUE val;
@@ -2705,23 +2864,32 @@ INSN_ENTRY(opt_newarray_send)
2705
2864
 
2706
2865
  /* ### Here we do the instruction body. ### */
2707
2866
  # define NAME_OF_CURRENT_INSN opt_newarray_send
2708
- # line 969 "insns.def"
2867
+ # line 1028 "insns.def"
2709
2868
  {
2710
2869
  switch(method) {
2711
- case idHash:
2870
+ case VM_OPT_NEWARRAY_SEND_HASH:
2712
2871
  val = vm_opt_newarray_hash(ec, num, STACK_ADDR_FROM_TOP(num));
2713
2872
  break;
2714
- case idMin:
2873
+ case VM_OPT_NEWARRAY_SEND_MIN:
2715
2874
  val = vm_opt_newarray_min(ec, num, STACK_ADDR_FROM_TOP(num));
2716
2875
  break;
2717
- case idMax:
2876
+ case VM_OPT_NEWARRAY_SEND_MAX:
2718
2877
  val = vm_opt_newarray_max(ec, num, STACK_ADDR_FROM_TOP(num));
2719
2878
  break;
2879
+ case VM_OPT_NEWARRAY_SEND_INCLUDE_P:
2880
+ val = vm_opt_newarray_include_p(ec, (long)num-1, STACK_ADDR_FROM_TOP(num), TOPN(0));
2881
+ break;
2882
+ case VM_OPT_NEWARRAY_SEND_PACK:
2883
+ val = vm_opt_newarray_pack_buffer(ec, (long)num-1, STACK_ADDR_FROM_TOP(num), TOPN(0), Qundef);
2884
+ break;
2885
+ case VM_OPT_NEWARRAY_SEND_PACK_BUFFER:
2886
+ val = vm_opt_newarray_pack_buffer(ec, (long)num-2, STACK_ADDR_FROM_TOP(num), TOPN(1), TOPN(0));
2887
+ break;
2720
2888
  default:
2721
2889
  rb_bug("unreachable");
2722
2890
  }
2723
2891
  }
2724
- # line 2725 "vm.inc"
2892
+ # line 2893 "vm.inc"
2725
2893
  # undef NAME_OF_CURRENT_INSN
2726
2894
 
2727
2895
  /* ### Instruction trailers. ### */
@@ -2761,7 +2929,7 @@ INSN_ENTRY(invokesuper)
2761
2929
 
2762
2930
  /* ### Here we do the instruction body. ### */
2763
2931
  # define NAME_OF_CURRENT_INSN invokesuper
2764
- # line 993 "insns.def"
2932
+ # line 1061 "insns.def"
2765
2933
  {
2766
2934
  VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true);
2767
2935
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super);
@@ -2772,7 +2940,7 @@ INSN_ENTRY(invokesuper)
2772
2940
  NEXT_INSN();
2773
2941
  }
2774
2942
  }
2775
- # line 2776 "vm.inc"
2943
+ # line 2944 "vm.inc"
2776
2944
  # undef NAME_OF_CURRENT_INSN
2777
2945
 
2778
2946
  /* ### Instruction trailers. ### */
@@ -2785,6 +2953,62 @@ INSN_ENTRY(invokesuper)
2785
2953
  END_INSN(invokesuper);
2786
2954
  }
2787
2955
 
2956
+ /* insn invokesuperforward(cd, blockiseq)(...)(val) */
2957
+ INSN_ENTRY(invokesuperforward)
2958
+ {
2959
+ /* ### Declare that we have just entered into an instruction. ### */
2960
+ START_OF_ORIGINAL_INSN(invokesuperforward);
2961
+ DEBUG_ENTER_INSN("invokesuperforward");
2962
+
2963
+ /* ### Declare and assign variables. ### */
2964
+ CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2965
+ ISEQ blockiseq = (ISEQ)GET_OPERAND(2);
2966
+ # define INSN_ATTR(x) attr_ ## x ## _invokesuperforward(cd, blockiseq)
2967
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2968
+ VALUE val;
2969
+
2970
+ /* ### Instruction preambles. ### */
2971
+ ADD_PC(INSN_ATTR(width));
2972
+ POPN(INSN_ATTR(popn));
2973
+ SETUP_CANARY(leaf);
2974
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2975
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2976
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, blockiseq);
2977
+
2978
+ /* ### Here we do the instruction body. ### */
2979
+ # define NAME_OF_CURRENT_INSN invokesuperforward
2980
+ # line 1080 "insns.def"
2981
+ {
2982
+ struct rb_forwarding_call_data adjusted_cd;
2983
+ struct rb_callinfo adjusted_ci;
2984
+
2985
+ VALUE bh = vm_caller_setup_fwd_args(GET_EC(), GET_CFP(), cd, blockiseq, 1, &adjusted_cd, &adjusted_ci);
2986
+
2987
+ val = vm_sendish(ec, GET_CFP(), &adjusted_cd.cd, bh, mexp_search_super);
2988
+ JIT_EXEC(ec, val);
2989
+
2990
+ if (cd->cc != adjusted_cd.cd.cc && vm_cc_markable(adjusted_cd.cd.cc)) {
2991
+ RB_OBJ_WRITE(GET_ISEQ(), &cd->cc, adjusted_cd.cd.cc);
2992
+ }
2993
+
2994
+ if (UNDEF_P(val)) {
2995
+ RESTORE_REGS();
2996
+ NEXT_INSN();
2997
+ }
2998
+ }
2999
+ # line 3000 "vm.inc"
3000
+ # undef NAME_OF_CURRENT_INSN
3001
+
3002
+ /* ### Instruction trailers. ### */
3003
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3004
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3005
+ PUSH(val);
3006
+ # undef INSN_ATTR
3007
+
3008
+ /* ### Leave the instruction. ### */
3009
+ END_INSN(invokesuperforward);
3010
+ }
3011
+
2788
3012
  /* insn invokeblock(cd)(...)(val) */
2789
3013
  INSN_ENTRY(invokeblock)
2790
3014
  {
@@ -2807,7 +3031,7 @@ INSN_ENTRY(invokeblock)
2807
3031
 
2808
3032
  /* ### Here we do the instruction body. ### */
2809
3033
  # define NAME_OF_CURRENT_INSN invokeblock
2810
- # line 1013 "insns.def"
3034
+ # line 1108 "insns.def"
2811
3035
  {
2812
3036
  VALUE bh = VM_BLOCK_HANDLER_NONE;
2813
3037
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock);
@@ -2818,7 +3042,7 @@ INSN_ENTRY(invokeblock)
2818
3042
  NEXT_INSN();
2819
3043
  }
2820
3044
  }
2821
- # line 2822 "vm.inc"
3045
+ # line 3046 "vm.inc"
2822
3046
  # undef NAME_OF_CURRENT_INSN
2823
3047
 
2824
3048
  /* ### Instruction trailers. ### */
@@ -2851,7 +3075,7 @@ INSN_ENTRY(leave)
2851
3075
 
2852
3076
  /* ### Here we do the instruction body. ### */
2853
3077
  # define NAME_OF_CURRENT_INSN leave
2854
- # line 1035 "insns.def"
3078
+ # line 1130 "insns.def"
2855
3079
  {
2856
3080
  if (OPT_CHECKED_RUN) {
2857
3081
  const VALUE *const bp = vm_base_ptr(GET_CFP());
@@ -2872,7 +3096,7 @@ INSN_ENTRY(leave)
2872
3096
  RESTORE_REGS();
2873
3097
  }
2874
3098
  }
2875
- # line 2876 "vm.inc"
3099
+ # line 3100 "vm.inc"
2876
3100
  # undef NAME_OF_CURRENT_INSN
2877
3101
 
2878
3102
  /* ### Instruction trailers. ### */
@@ -2907,13 +3131,13 @@ INSN_ENTRY(throw)
2907
3131
 
2908
3132
  /* ### Here we do the instruction body. ### */
2909
3133
  # define NAME_OF_CURRENT_INSN throw
2910
- # line 1068 "insns.def"
3134
+ # line 1163 "insns.def"
2911
3135
  {
2912
3136
  val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
2913
3137
  THROW_EXCEPTION(val);
2914
3138
  /* unreachable */
2915
3139
  }
2916
- # line 2917 "vm.inc"
3140
+ # line 3141 "vm.inc"
2917
3141
  # undef NAME_OF_CURRENT_INSN
2918
3142
 
2919
3143
  /* ### Instruction trailers. ### */
@@ -2949,12 +3173,12 @@ INSN_ENTRY(jump)
2949
3173
 
2950
3174
  /* ### Here we do the instruction body. ### */
2951
3175
  # define NAME_OF_CURRENT_INSN jump
2952
- # line 1086 "insns.def"
3176
+ # line 1181 "insns.def"
2953
3177
  {
2954
3178
  RUBY_VM_CHECK_INTS(ec);
2955
3179
  JUMP(dst);
2956
3180
  }
2957
- # line 2958 "vm.inc"
3181
+ # line 3182 "vm.inc"
2958
3182
  # undef NAME_OF_CURRENT_INSN
2959
3183
 
2960
3184
  /* ### Instruction trailers. ### */
@@ -2988,14 +3212,14 @@ INSN_ENTRY(branchif)
2988
3212
 
2989
3213
  /* ### Here we do the instruction body. ### */
2990
3214
  # define NAME_OF_CURRENT_INSN branchif
2991
- # line 1099 "insns.def"
3215
+ # line 1194 "insns.def"
2992
3216
  {
2993
3217
  if (RTEST(val)) {
2994
3218
  RUBY_VM_CHECK_INTS(ec);
2995
3219
  JUMP(dst);
2996
3220
  }
2997
3221
  }
2998
- # line 2999 "vm.inc"
3222
+ # line 3223 "vm.inc"
2999
3223
  # undef NAME_OF_CURRENT_INSN
3000
3224
 
3001
3225
  /* ### Instruction trailers. ### */
@@ -3029,14 +3253,14 @@ INSN_ENTRY(branchunless)
3029
3253
 
3030
3254
  /* ### Here we do the instruction body. ### */
3031
3255
  # define NAME_OF_CURRENT_INSN branchunless
3032
- # line 1114 "insns.def"
3256
+ # line 1209 "insns.def"
3033
3257
  {
3034
3258
  if (!RTEST(val)) {
3035
3259
  RUBY_VM_CHECK_INTS(ec);
3036
3260
  JUMP(dst);
3037
3261
  }
3038
3262
  }
3039
- # line 3040 "vm.inc"
3263
+ # line 3264 "vm.inc"
3040
3264
  # undef NAME_OF_CURRENT_INSN
3041
3265
 
3042
3266
  /* ### Instruction trailers. ### */
@@ -3070,14 +3294,14 @@ INSN_ENTRY(branchnil)
3070
3294
 
3071
3295
  /* ### Here we do the instruction body. ### */
3072
3296
  # define NAME_OF_CURRENT_INSN branchnil
3073
- # line 1129 "insns.def"
3297
+ # line 1224 "insns.def"
3074
3298
  {
3075
3299
  if (NIL_P(val)) {
3076
3300
  RUBY_VM_CHECK_INTS(ec);
3077
3301
  JUMP(dst);
3078
3302
  }
3079
3303
  }
3080
- # line 3081 "vm.inc"
3304
+ # line 3305 "vm.inc"
3081
3305
  # undef NAME_OF_CURRENT_INSN
3082
3306
 
3083
3307
  /* ### Instruction trailers. ### */
@@ -3114,11 +3338,11 @@ INSN_ENTRY(once)
3114
3338
 
3115
3339
  /* ### Here we do the instruction body. ### */
3116
3340
  # define NAME_OF_CURRENT_INSN once
3117
- # line 1146 "insns.def"
3341
+ # line 1241 "insns.def"
3118
3342
  {
3119
3343
  val = vm_once_dispatch(ec, iseq, ise);
3120
3344
  }
3121
- # line 3122 "vm.inc"
3345
+ # line 3346 "vm.inc"
3122
3346
  # undef NAME_OF_CURRENT_INSN
3123
3347
 
3124
3348
  /* ### Instruction trailers. ### */
@@ -3154,7 +3378,7 @@ INSN_ENTRY(opt_case_dispatch)
3154
3378
 
3155
3379
  /* ### Here we do the instruction body. ### */
3156
3380
  # define NAME_OF_CURRENT_INSN opt_case_dispatch
3157
- # line 1157 "insns.def"
3381
+ # line 1252 "insns.def"
3158
3382
  {
3159
3383
  OFFSET dst = vm_case_dispatch(hash, else_offset, key);
3160
3384
 
@@ -3162,7 +3386,7 @@ INSN_ENTRY(opt_case_dispatch)
3162
3386
  JUMP(dst);
3163
3387
  }
3164
3388
  }
3165
- # line 3166 "vm.inc"
3389
+ # line 3390 "vm.inc"
3166
3390
  # undef NAME_OF_CURRENT_INSN
3167
3391
 
3168
3392
  /* ### Instruction trailers. ### */
@@ -3198,7 +3422,7 @@ INSN_ENTRY(opt_plus)
3198
3422
 
3199
3423
  /* ### Here we do the instruction body. ### */
3200
3424
  # define NAME_OF_CURRENT_INSN opt_plus
3201
- # line 1173 "insns.def"
3425
+ # line 1268 "insns.def"
3202
3426
  {
3203
3427
  val = vm_opt_plus(recv, obj);
3204
3428
 
@@ -3206,7 +3430,7 @@ INSN_ENTRY(opt_plus)
3206
3430
  CALL_SIMPLE_METHOD();
3207
3431
  }
3208
3432
  }
3209
- # line 3210 "vm.inc"
3433
+ # line 3434 "vm.inc"
3210
3434
  # undef NAME_OF_CURRENT_INSN
3211
3435
 
3212
3436
  /* ### Instruction trailers. ### */
@@ -3245,7 +3469,7 @@ INSN_ENTRY(opt_minus)
3245
3469
 
3246
3470
  /* ### Here we do the instruction body. ### */
3247
3471
  # define NAME_OF_CURRENT_INSN opt_minus
3248
- # line 1187 "insns.def"
3472
+ # line 1282 "insns.def"
3249
3473
  {
3250
3474
  val = vm_opt_minus(recv, obj);
3251
3475
 
@@ -3253,7 +3477,7 @@ INSN_ENTRY(opt_minus)
3253
3477
  CALL_SIMPLE_METHOD();
3254
3478
  }
3255
3479
  }
3256
- # line 3257 "vm.inc"
3480
+ # line 3481 "vm.inc"
3257
3481
  # undef NAME_OF_CURRENT_INSN
3258
3482
 
3259
3483
  /* ### Instruction trailers. ### */
@@ -3292,7 +3516,7 @@ INSN_ENTRY(opt_mult)
3292
3516
 
3293
3517
  /* ### Here we do the instruction body. ### */
3294
3518
  # define NAME_OF_CURRENT_INSN opt_mult
3295
- # line 1201 "insns.def"
3519
+ # line 1296 "insns.def"
3296
3520
  {
3297
3521
  val = vm_opt_mult(recv, obj);
3298
3522
 
@@ -3300,7 +3524,7 @@ INSN_ENTRY(opt_mult)
3300
3524
  CALL_SIMPLE_METHOD();
3301
3525
  }
3302
3526
  }
3303
- # line 3304 "vm.inc"
3527
+ # line 3528 "vm.inc"
3304
3528
  # undef NAME_OF_CURRENT_INSN
3305
3529
 
3306
3530
  /* ### Instruction trailers. ### */
@@ -3339,7 +3563,7 @@ INSN_ENTRY(opt_div)
3339
3563
 
3340
3564
  /* ### Here we do the instruction body. ### */
3341
3565
  # define NAME_OF_CURRENT_INSN opt_div
3342
- # line 1218 "insns.def"
3566
+ # line 1313 "insns.def"
3343
3567
  {
3344
3568
  val = vm_opt_div(recv, obj);
3345
3569
 
@@ -3347,7 +3571,7 @@ INSN_ENTRY(opt_div)
3347
3571
  CALL_SIMPLE_METHOD();
3348
3572
  }
3349
3573
  }
3350
- # line 3351 "vm.inc"
3574
+ # line 3575 "vm.inc"
3351
3575
  # undef NAME_OF_CURRENT_INSN
3352
3576
 
3353
3577
  /* ### Instruction trailers. ### */
@@ -3386,7 +3610,7 @@ INSN_ENTRY(opt_mod)
3386
3610
 
3387
3611
  /* ### Here we do the instruction body. ### */
3388
3612
  # define NAME_OF_CURRENT_INSN opt_mod
3389
- # line 1234 "insns.def"
3613
+ # line 1329 "insns.def"
3390
3614
  {
3391
3615
  val = vm_opt_mod(recv, obj);
3392
3616
 
@@ -3394,7 +3618,7 @@ INSN_ENTRY(opt_mod)
3394
3618
  CALL_SIMPLE_METHOD();
3395
3619
  }
3396
3620
  }
3397
- # line 3398 "vm.inc"
3621
+ # line 3622 "vm.inc"
3398
3622
  # undef NAME_OF_CURRENT_INSN
3399
3623
 
3400
3624
  /* ### Instruction trailers. ### */
@@ -3433,7 +3657,7 @@ INSN_ENTRY(opt_eq)
3433
3657
 
3434
3658
  /* ### Here we do the instruction body. ### */
3435
3659
  # define NAME_OF_CURRENT_INSN opt_eq
3436
- # line 1248 "insns.def"
3660
+ # line 1343 "insns.def"
3437
3661
  {
3438
3662
  val = opt_equality(GET_ISEQ(), recv, obj, cd);
3439
3663
 
@@ -3441,7 +3665,7 @@ INSN_ENTRY(opt_eq)
3441
3665
  CALL_SIMPLE_METHOD();
3442
3666
  }
3443
3667
  }
3444
- # line 3445 "vm.inc"
3668
+ # line 3669 "vm.inc"
3445
3669
  # undef NAME_OF_CURRENT_INSN
3446
3670
 
3447
3671
  /* ### Instruction trailers. ### */
@@ -3482,7 +3706,7 @@ INSN_ENTRY(opt_neq)
3482
3706
 
3483
3707
  /* ### Here we do the instruction body. ### */
3484
3708
  # define NAME_OF_CURRENT_INSN opt_neq
3485
- # line 1262 "insns.def"
3709
+ # line 1357 "insns.def"
3486
3710
  {
3487
3711
  val = vm_opt_neq(GET_ISEQ(), cd, cd_eq, recv, obj);
3488
3712
 
@@ -3490,7 +3714,7 @@ INSN_ENTRY(opt_neq)
3490
3714
  CALL_SIMPLE_METHOD();
3491
3715
  }
3492
3716
  }
3493
- # line 3494 "vm.inc"
3717
+ # line 3718 "vm.inc"
3494
3718
  # undef NAME_OF_CURRENT_INSN
3495
3719
 
3496
3720
  /* ### Instruction trailers. ### */
@@ -3529,7 +3753,7 @@ INSN_ENTRY(opt_lt)
3529
3753
 
3530
3754
  /* ### Here we do the instruction body. ### */
3531
3755
  # define NAME_OF_CURRENT_INSN opt_lt
3532
- # line 1276 "insns.def"
3756
+ # line 1371 "insns.def"
3533
3757
  {
3534
3758
  val = vm_opt_lt(recv, obj);
3535
3759
 
@@ -3537,7 +3761,7 @@ INSN_ENTRY(opt_lt)
3537
3761
  CALL_SIMPLE_METHOD();
3538
3762
  }
3539
3763
  }
3540
- # line 3541 "vm.inc"
3764
+ # line 3765 "vm.inc"
3541
3765
  # undef NAME_OF_CURRENT_INSN
3542
3766
 
3543
3767
  /* ### Instruction trailers. ### */
@@ -3576,7 +3800,7 @@ INSN_ENTRY(opt_le)
3576
3800
 
3577
3801
  /* ### Here we do the instruction body. ### */
3578
3802
  # define NAME_OF_CURRENT_INSN opt_le
3579
- # line 1290 "insns.def"
3803
+ # line 1385 "insns.def"
3580
3804
  {
3581
3805
  val = vm_opt_le(recv, obj);
3582
3806
 
@@ -3584,7 +3808,7 @@ INSN_ENTRY(opt_le)
3584
3808
  CALL_SIMPLE_METHOD();
3585
3809
  }
3586
3810
  }
3587
- # line 3588 "vm.inc"
3811
+ # line 3812 "vm.inc"
3588
3812
  # undef NAME_OF_CURRENT_INSN
3589
3813
 
3590
3814
  /* ### Instruction trailers. ### */
@@ -3623,7 +3847,7 @@ INSN_ENTRY(opt_gt)
3623
3847
 
3624
3848
  /* ### Here we do the instruction body. ### */
3625
3849
  # define NAME_OF_CURRENT_INSN opt_gt
3626
- # line 1304 "insns.def"
3850
+ # line 1399 "insns.def"
3627
3851
  {
3628
3852
  val = vm_opt_gt(recv, obj);
3629
3853
 
@@ -3631,7 +3855,7 @@ INSN_ENTRY(opt_gt)
3631
3855
  CALL_SIMPLE_METHOD();
3632
3856
  }
3633
3857
  }
3634
- # line 3635 "vm.inc"
3858
+ # line 3859 "vm.inc"
3635
3859
  # undef NAME_OF_CURRENT_INSN
3636
3860
 
3637
3861
  /* ### Instruction trailers. ### */
@@ -3670,7 +3894,7 @@ INSN_ENTRY(opt_ge)
3670
3894
 
3671
3895
  /* ### Here we do the instruction body. ### */
3672
3896
  # define NAME_OF_CURRENT_INSN opt_ge
3673
- # line 1318 "insns.def"
3897
+ # line 1413 "insns.def"
3674
3898
  {
3675
3899
  val = vm_opt_ge(recv, obj);
3676
3900
 
@@ -3678,7 +3902,7 @@ INSN_ENTRY(opt_ge)
3678
3902
  CALL_SIMPLE_METHOD();
3679
3903
  }
3680
3904
  }
3681
- # line 3682 "vm.inc"
3905
+ # line 3906 "vm.inc"
3682
3906
  # undef NAME_OF_CURRENT_INSN
3683
3907
 
3684
3908
  /* ### Instruction trailers. ### */
@@ -3717,7 +3941,7 @@ INSN_ENTRY(opt_ltlt)
3717
3941
 
3718
3942
  /* ### Here we do the instruction body. ### */
3719
3943
  # define NAME_OF_CURRENT_INSN opt_ltlt
3720
- # line 1336 "insns.def"
3944
+ # line 1431 "insns.def"
3721
3945
  {
3722
3946
  val = vm_opt_ltlt(recv, obj);
3723
3947
 
@@ -3725,7 +3949,7 @@ INSN_ENTRY(opt_ltlt)
3725
3949
  CALL_SIMPLE_METHOD();
3726
3950
  }
3727
3951
  }
3728
- # line 3729 "vm.inc"
3952
+ # line 3953 "vm.inc"
3729
3953
  # undef NAME_OF_CURRENT_INSN
3730
3954
 
3731
3955
  /* ### Instruction trailers. ### */
@@ -3764,7 +3988,7 @@ INSN_ENTRY(opt_and)
3764
3988
 
3765
3989
  /* ### Here we do the instruction body. ### */
3766
3990
  # define NAME_OF_CURRENT_INSN opt_and
3767
- # line 1350 "insns.def"
3991
+ # line 1445 "insns.def"
3768
3992
  {
3769
3993
  val = vm_opt_and(recv, obj);
3770
3994
 
@@ -3772,7 +3996,7 @@ INSN_ENTRY(opt_and)
3772
3996
  CALL_SIMPLE_METHOD();
3773
3997
  }
3774
3998
  }
3775
- # line 3776 "vm.inc"
3999
+ # line 4000 "vm.inc"
3776
4000
  # undef NAME_OF_CURRENT_INSN
3777
4001
 
3778
4002
  /* ### Instruction trailers. ### */
@@ -3811,7 +4035,7 @@ INSN_ENTRY(opt_or)
3811
4035
 
3812
4036
  /* ### Here we do the instruction body. ### */
3813
4037
  # define NAME_OF_CURRENT_INSN opt_or
3814
- # line 1364 "insns.def"
4038
+ # line 1459 "insns.def"
3815
4039
  {
3816
4040
  val = vm_opt_or(recv, obj);
3817
4041
 
@@ -3819,7 +4043,7 @@ INSN_ENTRY(opt_or)
3819
4043
  CALL_SIMPLE_METHOD();
3820
4044
  }
3821
4045
  }
3822
- # line 3823 "vm.inc"
4046
+ # line 4047 "vm.inc"
3823
4047
  # undef NAME_OF_CURRENT_INSN
3824
4048
 
3825
4049
  /* ### Instruction trailers. ### */
@@ -3858,7 +4082,7 @@ INSN_ENTRY(opt_aref)
3858
4082
 
3859
4083
  /* ### Here we do the instruction body. ### */
3860
4084
  # define NAME_OF_CURRENT_INSN opt_aref
3861
- # line 1383 "insns.def"
4085
+ # line 1478 "insns.def"
3862
4086
  {
3863
4087
  val = vm_opt_aref(recv, obj);
3864
4088
 
@@ -3866,7 +4090,7 @@ INSN_ENTRY(opt_aref)
3866
4090
  CALL_SIMPLE_METHOD();
3867
4091
  }
3868
4092
  }
3869
- # line 3870 "vm.inc"
4093
+ # line 4094 "vm.inc"
3870
4094
  # undef NAME_OF_CURRENT_INSN
3871
4095
 
3872
4096
  /* ### Instruction trailers. ### */
@@ -3906,7 +4130,7 @@ INSN_ENTRY(opt_aset)
3906
4130
 
3907
4131
  /* ### Here we do the instruction body. ### */
3908
4132
  # define NAME_OF_CURRENT_INSN opt_aset
3909
- # line 1400 "insns.def"
4133
+ # line 1495 "insns.def"
3910
4134
  {
3911
4135
  val = vm_opt_aset(recv, obj, set);
3912
4136
 
@@ -3914,7 +4138,7 @@ INSN_ENTRY(opt_aset)
3914
4138
  CALL_SIMPLE_METHOD();
3915
4139
  }
3916
4140
  }
3917
- # line 3918 "vm.inc"
4141
+ # line 4142 "vm.inc"
3918
4142
  # undef NAME_OF_CURRENT_INSN
3919
4143
 
3920
4144
  /* ### Instruction trailers. ### */
@@ -3954,7 +4178,7 @@ INSN_ENTRY(opt_aset_with)
3954
4178
 
3955
4179
  /* ### Here we do the instruction body. ### */
3956
4180
  # define NAME_OF_CURRENT_INSN opt_aset_with
3957
- # line 1416 "insns.def"
4181
+ # line 1511 "insns.def"
3958
4182
  {
3959
4183
  VALUE tmp = vm_opt_aset_with(recv, key, val);
3960
4184
 
@@ -3967,7 +4191,7 @@ INSN_ENTRY(opt_aset_with)
3967
4191
  CALL_SIMPLE_METHOD();
3968
4192
  }
3969
4193
  }
3970
- # line 3971 "vm.inc"
4194
+ # line 4195 "vm.inc"
3971
4195
  # undef NAME_OF_CURRENT_INSN
3972
4196
 
3973
4197
  /* ### Instruction trailers. ### */
@@ -4007,7 +4231,7 @@ INSN_ENTRY(opt_aref_with)
4007
4231
 
4008
4232
  /* ### Here we do the instruction body. ### */
4009
4233
  # define NAME_OF_CURRENT_INSN opt_aref_with
4010
- # line 1437 "insns.def"
4234
+ # line 1532 "insns.def"
4011
4235
  {
4012
4236
  val = vm_opt_aref_with(recv, key);
4013
4237
 
@@ -4016,7 +4240,7 @@ INSN_ENTRY(opt_aref_with)
4016
4240
  CALL_SIMPLE_METHOD();
4017
4241
  }
4018
4242
  }
4019
- # line 4020 "vm.inc"
4243
+ # line 4244 "vm.inc"
4020
4244
  # undef NAME_OF_CURRENT_INSN
4021
4245
 
4022
4246
  /* ### Instruction trailers. ### */
@@ -4054,7 +4278,7 @@ INSN_ENTRY(opt_length)
4054
4278
 
4055
4279
  /* ### Here we do the instruction body. ### */
4056
4280
  # define NAME_OF_CURRENT_INSN opt_length
4057
- # line 1452 "insns.def"
4281
+ # line 1547 "insns.def"
4058
4282
  {
4059
4283
  val = vm_opt_length(recv, BOP_LENGTH);
4060
4284
 
@@ -4062,7 +4286,7 @@ INSN_ENTRY(opt_length)
4062
4286
  CALL_SIMPLE_METHOD();
4063
4287
  }
4064
4288
  }
4065
- # line 4066 "vm.inc"
4289
+ # line 4290 "vm.inc"
4066
4290
  # undef NAME_OF_CURRENT_INSN
4067
4291
 
4068
4292
  /* ### Instruction trailers. ### */
@@ -4100,7 +4324,7 @@ INSN_ENTRY(opt_size)
4100
4324
 
4101
4325
  /* ### Here we do the instruction body. ### */
4102
4326
  # define NAME_OF_CURRENT_INSN opt_size
4103
- # line 1466 "insns.def"
4327
+ # line 1561 "insns.def"
4104
4328
  {
4105
4329
  val = vm_opt_length(recv, BOP_SIZE);
4106
4330
 
@@ -4108,7 +4332,7 @@ INSN_ENTRY(opt_size)
4108
4332
  CALL_SIMPLE_METHOD();
4109
4333
  }
4110
4334
  }
4111
- # line 4112 "vm.inc"
4335
+ # line 4336 "vm.inc"
4112
4336
  # undef NAME_OF_CURRENT_INSN
4113
4337
 
4114
4338
  /* ### Instruction trailers. ### */
@@ -4146,7 +4370,7 @@ INSN_ENTRY(opt_empty_p)
4146
4370
 
4147
4371
  /* ### Here we do the instruction body. ### */
4148
4372
  # define NAME_OF_CURRENT_INSN opt_empty_p
4149
- # line 1480 "insns.def"
4373
+ # line 1575 "insns.def"
4150
4374
  {
4151
4375
  val = vm_opt_empty_p(recv);
4152
4376
 
@@ -4154,7 +4378,7 @@ INSN_ENTRY(opt_empty_p)
4154
4378
  CALL_SIMPLE_METHOD();
4155
4379
  }
4156
4380
  }
4157
- # line 4158 "vm.inc"
4381
+ # line 4382 "vm.inc"
4158
4382
  # undef NAME_OF_CURRENT_INSN
4159
4383
 
4160
4384
  /* ### Instruction trailers. ### */
@@ -4192,7 +4416,7 @@ INSN_ENTRY(opt_succ)
4192
4416
 
4193
4417
  /* ### Here we do the instruction body. ### */
4194
4418
  # define NAME_OF_CURRENT_INSN opt_succ
4195
- # line 1494 "insns.def"
4419
+ # line 1589 "insns.def"
4196
4420
  {
4197
4421
  val = vm_opt_succ(recv);
4198
4422
 
@@ -4200,7 +4424,7 @@ INSN_ENTRY(opt_succ)
4200
4424
  CALL_SIMPLE_METHOD();
4201
4425
  }
4202
4426
  }
4203
- # line 4204 "vm.inc"
4427
+ # line 4428 "vm.inc"
4204
4428
  # undef NAME_OF_CURRENT_INSN
4205
4429
 
4206
4430
  /* ### Instruction trailers. ### */
@@ -4238,7 +4462,7 @@ INSN_ENTRY(opt_not)
4238
4462
 
4239
4463
  /* ### Here we do the instruction body. ### */
4240
4464
  # define NAME_OF_CURRENT_INSN opt_not
4241
- # line 1508 "insns.def"
4465
+ # line 1603 "insns.def"
4242
4466
  {
4243
4467
  val = vm_opt_not(GET_ISEQ(), cd, recv);
4244
4468
 
@@ -4246,7 +4470,7 @@ INSN_ENTRY(opt_not)
4246
4470
  CALL_SIMPLE_METHOD();
4247
4471
  }
4248
4472
  }
4249
- # line 4250 "vm.inc"
4473
+ # line 4474 "vm.inc"
4250
4474
  # undef NAME_OF_CURRENT_INSN
4251
4475
 
4252
4476
  /* ### Instruction trailers. ### */
@@ -4285,7 +4509,7 @@ INSN_ENTRY(opt_regexpmatch2)
4285
4509
 
4286
4510
  /* ### Here we do the instruction body. ### */
4287
4511
  # define NAME_OF_CURRENT_INSN opt_regexpmatch2
4288
- # line 1523 "insns.def"
4512
+ # line 1618 "insns.def"
4289
4513
  {
4290
4514
  val = vm_opt_regexpmatch2(obj2, obj1);
4291
4515
 
@@ -4293,7 +4517,7 @@ INSN_ENTRY(opt_regexpmatch2)
4293
4517
  CALL_SIMPLE_METHOD();
4294
4518
  }
4295
4519
  }
4296
- # line 4297 "vm.inc"
4520
+ # line 4521 "vm.inc"
4297
4521
  # undef NAME_OF_CURRENT_INSN
4298
4522
 
4299
4523
  /* ### Instruction trailers. ### */
@@ -4330,11 +4554,11 @@ INSN_ENTRY(invokebuiltin)
4330
4554
 
4331
4555
  /* ### Here we do the instruction body. ### */
4332
4556
  # define NAME_OF_CURRENT_INSN invokebuiltin
4333
- # line 1539 "insns.def"
4557
+ # line 1634 "insns.def"
4334
4558
  {
4335
4559
  val = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc));
4336
4560
  }
4337
- # line 4338 "vm.inc"
4561
+ # line 4562 "vm.inc"
4338
4562
  # undef NAME_OF_CURRENT_INSN
4339
4563
 
4340
4564
  /* ### Instruction trailers. ### */
@@ -4373,11 +4597,11 @@ INSN_ENTRY(opt_invokebuiltin_delegate)
4373
4597
 
4374
4598
  /* ### Here we do the instruction body. ### */
4375
4599
  # define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate
4376
- # line 1550 "insns.def"
4600
+ # line 1645 "insns.def"
4377
4601
  {
4378
4602
  val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4379
4603
  }
4380
- # line 4381 "vm.inc"
4604
+ # line 4605 "vm.inc"
4381
4605
  # undef NAME_OF_CURRENT_INSN
4382
4606
 
4383
4607
  /* ### Instruction trailers. ### */
@@ -4416,7 +4640,7 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4416
4640
 
4417
4641
  /* ### Here we do the instruction body. ### */
4418
4642
  # define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate_leave
4419
- # line 1561 "insns.def"
4643
+ # line 1656 "insns.def"
4420
4644
  {
4421
4645
  val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4422
4646
 
@@ -4434,7 +4658,7 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4434
4658
  RESTORE_REGS();
4435
4659
  }
4436
4660
  }
4437
- # line 4438 "vm.inc"
4661
+ # line 4662 "vm.inc"
4438
4662
  # undef NAME_OF_CURRENT_INSN
4439
4663
 
4440
4664
  /* ### Instruction trailers. ### */
@@ -4460,7 +4684,7 @@ INSN_ENTRY(getlocal_WC_0)
4460
4684
  /* ### Declare and assign variables. ### */
4461
4685
  #line 10 "defs/opt_operand.def"
4462
4686
  const rb_num_t level = 0;
4463
- #line 4464 "vm.inc"
4687
+ #line 4688 "vm.inc"
4464
4688
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4465
4689
  # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_0(idx)
4466
4690
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
@@ -4480,7 +4704,7 @@ INSN_ENTRY(getlocal_WC_0)
4480
4704
  RB_DEBUG_COUNTER_INC(lvar_get);
4481
4705
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
4482
4706
  }
4483
- # line 4484 "vm.inc"
4707
+ # line 4708 "vm.inc"
4484
4708
  # undef NAME_OF_CURRENT_INSN
4485
4709
 
4486
4710
  /* ### Instruction trailers. ### */
@@ -4506,7 +4730,7 @@ INSN_ENTRY(getlocal_WC_1)
4506
4730
  /* ### Declare and assign variables. ### */
4507
4731
  #line 11 "defs/opt_operand.def"
4508
4732
  const rb_num_t level = 1;
4509
- #line 4510 "vm.inc"
4733
+ #line 4734 "vm.inc"
4510
4734
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4511
4735
  # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_1(idx)
4512
4736
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
@@ -4526,7 +4750,7 @@ INSN_ENTRY(getlocal_WC_1)
4526
4750
  RB_DEBUG_COUNTER_INC(lvar_get);
4527
4751
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
4528
4752
  }
4529
- # line 4530 "vm.inc"
4753
+ # line 4754 "vm.inc"
4530
4754
  # undef NAME_OF_CURRENT_INSN
4531
4755
 
4532
4756
  /* ### Instruction trailers. ### */
@@ -4552,7 +4776,7 @@ INSN_ENTRY(setlocal_WC_0)
4552
4776
  /* ### Declare and assign variables. ### */
4553
4777
  #line 12 "defs/opt_operand.def"
4554
4778
  const rb_num_t level = 0;
4555
- #line 4556 "vm.inc"
4779
+ #line 4780 "vm.inc"
4556
4780
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4557
4781
  # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_0(idx)
4558
4782
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
@@ -4572,7 +4796,7 @@ INSN_ENTRY(setlocal_WC_0)
4572
4796
  RB_DEBUG_COUNTER_INC(lvar_set);
4573
4797
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
4574
4798
  }
4575
- # line 4576 "vm.inc"
4799
+ # line 4800 "vm.inc"
4576
4800
  # undef NAME_OF_CURRENT_INSN
4577
4801
 
4578
4802
  /* ### Instruction trailers. ### */
@@ -4595,7 +4819,7 @@ INSN_ENTRY(setlocal_WC_1)
4595
4819
  /* ### Declare and assign variables. ### */
4596
4820
  #line 13 "defs/opt_operand.def"
4597
4821
  const rb_num_t level = 1;
4598
- #line 4599 "vm.inc"
4822
+ #line 4823 "vm.inc"
4599
4823
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4600
4824
  # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_1(idx)
4601
4825
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
@@ -4615,7 +4839,7 @@ INSN_ENTRY(setlocal_WC_1)
4615
4839
  RB_DEBUG_COUNTER_INC(lvar_set);
4616
4840
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
4617
4841
  }
4618
- # line 4619 "vm.inc"
4842
+ # line 4843 "vm.inc"
4619
4843
  # undef NAME_OF_CURRENT_INSN
4620
4844
 
4621
4845
  /* ### Instruction trailers. ### */
@@ -4638,7 +4862,7 @@ INSN_ENTRY(putobject_INT2FIX_0_)
4638
4862
  /* ### Declare and assign variables. ### */
4639
4863
  #line 15 "defs/opt_operand.def"
4640
4864
  const VALUE val = INT2FIX(0);
4641
- #line 4642 "vm.inc"
4865
+ #line 4866 "vm.inc"
4642
4866
  # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_0_()
4643
4867
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4644
4868
 
@@ -4668,7 +4892,7 @@ INSN_ENTRY(putobject_INT2FIX_1_)
4668
4892
  /* ### Declare and assign variables. ### */
4669
4893
  #line 16 "defs/opt_operand.def"
4670
4894
  const VALUE val = INT2FIX(1);
4671
- #line 4672 "vm.inc"
4895
+ #line 4896 "vm.inc"
4672
4896
  # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_1_()
4673
4897
  const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4674
4898
 
@@ -4940,15 +5164,6 @@ INSN_ENTRY(trace_newarray)
4940
5164
  END_INSN(trace_newarray);
4941
5165
  }
4942
5166
 
4943
- /* insn trace_newarraykwsplat(...)(...)(...) */
4944
- INSN_ENTRY(trace_newarraykwsplat)
4945
- {
4946
- vm_trace(ec, GET_CFP());
4947
-
4948
- DISPATCH_ORIGINAL_INSN(newarraykwsplat);
4949
- END_INSN(trace_newarraykwsplat);
4950
- }
4951
-
4952
5167
  /* insn trace_pushtoarraykwsplat(...)(...)(...) */
4953
5168
  INSN_ENTRY(trace_pushtoarraykwsplat)
4954
5169
  {
@@ -5201,6 +5416,15 @@ INSN_ENTRY(trace_send)
5201
5416
  END_INSN(trace_send);
5202
5417
  }
5203
5418
 
5419
+ /* insn trace_sendforward(...)(...)(...) */
5420
+ INSN_ENTRY(trace_sendforward)
5421
+ {
5422
+ vm_trace(ec, GET_CFP());
5423
+
5424
+ DISPATCH_ORIGINAL_INSN(sendforward);
5425
+ END_INSN(trace_sendforward);
5426
+ }
5427
+
5204
5428
  /* insn trace_opt_send_without_block(...)(...)(...) */
5205
5429
  INSN_ENTRY(trace_opt_send_without_block)
5206
5430
  {
@@ -5219,6 +5443,24 @@ INSN_ENTRY(trace_objtostring)
5219
5443
  END_INSN(trace_objtostring);
5220
5444
  }
5221
5445
 
5446
+ /* insn trace_opt_ary_freeze(...)(...)(...) */
5447
+ INSN_ENTRY(trace_opt_ary_freeze)
5448
+ {
5449
+ vm_trace(ec, GET_CFP());
5450
+
5451
+ DISPATCH_ORIGINAL_INSN(opt_ary_freeze);
5452
+ END_INSN(trace_opt_ary_freeze);
5453
+ }
5454
+
5455
+ /* insn trace_opt_hash_freeze(...)(...)(...) */
5456
+ INSN_ENTRY(trace_opt_hash_freeze)
5457
+ {
5458
+ vm_trace(ec, GET_CFP());
5459
+
5460
+ DISPATCH_ORIGINAL_INSN(opt_hash_freeze);
5461
+ END_INSN(trace_opt_hash_freeze);
5462
+ }
5463
+
5222
5464
  /* insn trace_opt_str_freeze(...)(...)(...) */
5223
5465
  INSN_ENTRY(trace_opt_str_freeze)
5224
5466
  {
@@ -5246,6 +5488,15 @@ INSN_ENTRY(trace_opt_str_uminus)
5246
5488
  END_INSN(trace_opt_str_uminus);
5247
5489
  }
5248
5490
 
5491
+ /* insn trace_opt_duparray_send(...)(...)(...) */
5492
+ INSN_ENTRY(trace_opt_duparray_send)
5493
+ {
5494
+ vm_trace(ec, GET_CFP());
5495
+
5496
+ DISPATCH_ORIGINAL_INSN(opt_duparray_send);
5497
+ END_INSN(trace_opt_duparray_send);
5498
+ }
5499
+
5249
5500
  /* insn trace_opt_newarray_send(...)(...)(...) */
5250
5501
  INSN_ENTRY(trace_opt_newarray_send)
5251
5502
  {
@@ -5264,6 +5515,15 @@ INSN_ENTRY(trace_invokesuper)
5264
5515
  END_INSN(trace_invokesuper);
5265
5516
  }
5266
5517
 
5518
+ /* insn trace_invokesuperforward(...)(...)(...) */
5519
+ INSN_ENTRY(trace_invokesuperforward)
5520
+ {
5521
+ vm_trace(ec, GET_CFP());
5522
+
5523
+ DISPATCH_ORIGINAL_INSN(invokesuperforward);
5524
+ END_INSN(trace_invokesuperforward);
5525
+ }
5526
+
5267
5527
  /* insn trace_invokeblock(...)(...)(...) */
5268
5528
  INSN_ENTRY(trace_invokeblock)
5269
5529
  {