debase-ruby_core_source 0.10.9 → 0.10.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +1 -1
  4. data/Rakefile +6 -3
  5. data/debase-ruby_core_source.gemspec +2 -1
  6. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/addr2line.h +2 -3
  7. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/builtin.h +17 -2
  8. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/build_assert/build_assert.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/check_type/check_type.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/container_of/container_of.h +0 -0
  11. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/list/list.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/str/str.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/constant.h +10 -5
  14. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/debug_counter.h +127 -48
  15. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/dln.h +3 -18
  16. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/encindex.h +3 -2
  17. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/eval_intern.h +16 -7
  18. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/gc.h +13 -2
  19. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/hrtime.h +0 -0
  20. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/id.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/id_table.h +2 -0
  22. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/insns.inc +0 -4
  23. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/insns_info.inc +323 -536
  24. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/array.h +119 -0
  25. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bignum.h +246 -0
  26. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bits.h +566 -0
  27. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/class.h +174 -0
  28. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compar.h +50 -0
  29. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compile.h +32 -0
  30. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compilers.h +108 -0
  31. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/complex.h +29 -0
  32. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/cont.h +25 -0
  33. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/dir.h +17 -0
  34. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enc.h +20 -0
  35. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/encoding.h +28 -0
  36. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enum.h +19 -0
  37. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enumerator.h +22 -0
  38. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/error.h +124 -0
  39. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/eval.h +33 -0
  40. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/file.h +39 -0
  41. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/fixnum.h +185 -0
  42. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/gc.h +161 -0
  43. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/hash.h +241 -0
  44. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/imemo.h +243 -0
  45. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/inits.h +51 -0
  46. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/io.h +35 -0
  47. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/load.h +19 -0
  48. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/loadpath.h +17 -0
  49. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/math.h +24 -0
  50. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/missing.h +19 -0
  51. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/numeric.h +255 -0
  52. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/object.h +83 -0
  53. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/parse.h +23 -0
  54. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/proc.h +33 -0
  55. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/process.h +136 -0
  56. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/random.h +17 -0
  57. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/range.h +41 -0
  58. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/rational.h +71 -0
  59. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/re.h +29 -0
  60. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/sanitizers.h +191 -0
  61. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/scheduler.h +44 -0
  62. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/serial.h +24 -0
  63. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/signal.h +22 -0
  64. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/static_assert.h +17 -0
  65. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/string.h +140 -0
  66. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/struct.h +154 -0
  67. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/symbol.h +41 -0
  68. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/thread.h +54 -0
  69. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/time.h +35 -0
  70. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/transcode.h +21 -0
  71. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/util.h +31 -0
  72. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/variable.h +84 -0
  73. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/vm.h +136 -0
  74. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/warnings.h +17 -0
  75. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal.h +107 -0
  76. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/iseq.h +11 -18
  77. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/known_errors.inc +0 -0
  78. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/method.h +21 -8
  79. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/mjit.h +89 -48
  80. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/mjit_compile.inc +2746 -2288
  81. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/node.h +32 -24
  82. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/node_name.inc +2 -2
  83. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/opt_sc.inc +0 -0
  84. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/optinsn.inc +0 -0
  85. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/optunifs.inc +0 -0
  86. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/parse.h +1 -0
  87. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/probes_helper.h +2 -0
  88. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ractor_core.h +343 -0
  89. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/regenc.h +0 -0
  90. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/regint.h +1 -1
  91. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/regparse.h +0 -0
  92. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
  93. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_assert.h +15 -0
  94. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
  95. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/siphash.h +0 -0
  96. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/symbol.h +4 -4
  97. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/thread_pthread.h +45 -5
  98. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/thread_win32.h +28 -3
  99. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/timev.h +1 -0
  100. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/transcode_data.h +2 -3
  101. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/transient_heap.h +6 -3
  102. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/variable.h +22 -0
  103. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/version.h +23 -11
  104. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vm.inc +707 -671
  105. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vm_call_iseq_optimized.inc +93 -86
  106. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_callinfo.h +456 -0
  107. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/vm_core.h +262 -194
  108. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_debug.h +116 -0
  109. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/vm_exec.h +9 -6
  110. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/vm_insnhelper.h +28 -26
  111. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vm_opts.h +6 -5
  112. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_sync.h +136 -0
  113. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vmtc.inc +0 -4
  114. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/addr2line.h +2 -3
  115. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/builtin.h +83 -0
  116. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/build_assert/build_assert.h +13 -13
  117. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/check_type/check_type.h +17 -17
  118. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/container_of/container_of.h +63 -63
  119. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/list/list.h +262 -262
  120. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/str/str.h +4 -4
  121. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/constant.h +10 -9
  122. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/darray.h +198 -0
  123. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/debug_counter.h +137 -48
  124. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/dln.h +3 -23
  125. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/encindex.h +3 -2
  126. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/eval_intern.h +34 -41
  127. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/gc.h +24 -11
  128. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/hrtime.h +9 -9
  129. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/id.h +4 -3
  130. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/id_table.h +3 -1
  131. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/insns.inc +6 -8
  132. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/insns_info.inc +1907 -2543
  133. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/array.h +113 -0
  134. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/bignum.h +246 -0
  135. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/bits.h +565 -0
  136. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/class.h +188 -0
  137. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/compar.h +49 -0
  138. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/compile.h +35 -0
  139. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/compilers.h +107 -0
  140. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/complex.h +29 -0
  141. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/cont.h +24 -0
  142. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/dir.h +16 -0
  143. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/enc.h +19 -0
  144. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/encoding.h +30 -0
  145. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/enum.h +18 -0
  146. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/enumerator.h +21 -0
  147. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/error.h +191 -0
  148. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/eval.h +32 -0
  149. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/file.h +38 -0
  150. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/fixnum.h +184 -0
  151. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/gc.h +175 -0
  152. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/hash.h +243 -0
  153. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/imemo.h +243 -0
  154. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/inits.h +50 -0
  155. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/io.h +38 -0
  156. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/load.h +18 -0
  157. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/loadpath.h +16 -0
  158. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/math.h +23 -0
  159. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/missing.h +18 -0
  160. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/numeric.h +271 -0
  161. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/object.h +83 -0
  162. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/parse.h +23 -0
  163. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/proc.h +32 -0
  164. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/process.h +137 -0
  165. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/random.h +16 -0
  166. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/range.h +40 -0
  167. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/rational.h +72 -0
  168. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/re.h +30 -0
  169. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/sanitizers.h +190 -0
  170. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/serial.h +23 -0
  171. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/signal.h +21 -0
  172. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/static_assert.h +16 -0
  173. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/string.h +141 -0
  174. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/struct.h +153 -0
  175. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/symbol.h +40 -0
  176. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/thread.h +53 -0
  177. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/time.h +34 -0
  178. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/transcode.h +20 -0
  179. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/util.h +27 -0
  180. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/variable.h +83 -0
  181. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/vm.h +132 -0
  182. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/warnings.h +16 -0
  183. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal.h +109 -0
  184. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/iseq.h +44 -35
  185. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/known_errors.inc +0 -0
  186. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/method.h +21 -4
  187. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/mjit.h +231 -0
  188. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/mjit_compile.inc +3322 -2940
  189. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/node.h +39 -23
  190. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/node_name.inc +210 -0
  191. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/opt_sc.inc +0 -2
  192. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/optinsn.inc +7 -7
  193. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/optunifs.inc +1 -1
  194. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/parse.h +9 -5
  195. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/probes_helper.h +9 -7
  196. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/ractor_core.h +346 -0
  197. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/regenc.h +8 -8
  198. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/regint.h +16 -12
  199. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/regparse.h +2 -2
  200. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/revision.h +2 -0
  201. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/ruby_assert.h +14 -0
  202. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/ruby_atomic.h +23 -0
  203. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/siphash.h +0 -0
  204. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/symbol.h +14 -14
  205. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/thread_pthread.h +45 -5
  206. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/thread_win32.h +30 -5
  207. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/timev.h +1 -0
  208. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/transcode_data.h +49 -50
  209. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/transient_heap.h +6 -3
  210. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/variable.h +21 -0
  211. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/version.h +15 -4
  212. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/vm.inc +1033 -887
  213. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_call_iseq_optimized.inc +244 -0
  214. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_callinfo.h +454 -0
  215. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/vm_core.h +508 -362
  216. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_debug.h +119 -0
  217. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/vm_exec.h +22 -18
  218. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/vm_insnhelper.h +42 -32
  219. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/vm_opts.h +8 -5
  220. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_sync.h +137 -0
  221. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/vmtc.inc +6 -8
  222. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit.h +63 -0
  223. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_asm.h +392 -0
  224. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_codegen.h +19 -0
  225. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_core.h +302 -0
  226. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_iface.h +38 -0
  227. data/lib/debase/ruby_core_source/version.rb +1 -1
  228. data/lib/debase/ruby_core_source.rb +0 -2
  229. metadata +240 -110
  230. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/internal.h +0 -2682
  231. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/revision.h +0 -2
  232. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/ruby_assert.h +0 -15
  233. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/ruby_atomic.h +0 -244
  234. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/vm_call_iseq_optimized.inc +0 -237
  235. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/vm_debug.h +0 -34
  236. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/internal.h +0 -2657
  237. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/mjit.h +0 -175
  238. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/node_name.inc +0 -208
  239. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/revision.h +0 -2
  240. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/ruby_assert.h +0 -15
  241. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/ruby_atomic.h +0 -244
  242. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/vm_debug.h +0 -34
@@ -79,7 +79,7 @@ INSN_ENTRY(getlocal)
79
79
 
80
80
  /* ### Instruction preambles. ### */
81
81
  if (! leaf) ADD_PC(INSN_ATTR(width));
82
- SETUP_CANARY();
82
+ SETUP_CANARY(leaf);
83
83
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
84
84
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
85
85
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
@@ -97,9 +97,11 @@ INSN_ENTRY(getlocal)
97
97
 
98
98
  /* ### Instruction trailers. ### */
99
99
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
100
- CHECK_CANARY();
100
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
101
101
  INC_SP(INSN_ATTR(sp_inc));
102
102
  TOPN(0) = val;
103
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
104
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
103
105
  if (leaf) ADD_PC(INSN_ATTR(width));
104
106
  # undef INSN_ATTR
105
107
 
@@ -123,7 +125,7 @@ INSN_ENTRY(setlocal)
123
125
 
124
126
  /* ### Instruction preambles. ### */
125
127
  if (! leaf) ADD_PC(INSN_ATTR(width));
126
- SETUP_CANARY();
128
+ SETUP_CANARY(leaf);
127
129
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
128
130
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
129
131
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
@@ -136,12 +138,12 @@ INSN_ENTRY(setlocal)
136
138
  RB_DEBUG_COUNTER_INC(lvar_set);
137
139
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
138
140
  }
139
- # line 140 "vm.inc"
141
+ # line 142 "vm.inc"
140
142
  # undef NAME_OF_CURRENT_INSN
141
143
 
142
144
  /* ### Instruction trailers. ### */
143
145
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
144
- CHECK_CANARY();
146
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
145
147
  INC_SP(INSN_ATTR(sp_inc));
146
148
  if (leaf) ADD_PC(INSN_ATTR(width));
147
149
  # undef INSN_ATTR
@@ -166,7 +168,7 @@ INSN_ENTRY(getblockparam)
166
168
 
167
169
  /* ### Instruction preambles. ### */
168
170
  if (! leaf) ADD_PC(INSN_ATTR(width));
169
- SETUP_CANARY();
171
+ SETUP_CANARY(leaf);
170
172
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
171
173
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
172
174
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
@@ -179,24 +181,26 @@ INSN_ENTRY(getblockparam)
179
181
  VM_ASSERT(VM_ENV_LOCAL_P(ep));
180
182
 
181
183
  if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) {
182
- val = rb_vm_bh_to_procval(ec, VM_ENV_BLOCK_HANDLER(ep));
183
- vm_env_write(ep, -(int)idx, val);
184
- VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
184
+ val = rb_vm_bh_to_procval(ec, VM_ENV_BLOCK_HANDLER(ep));
185
+ vm_env_write(ep, -(int)idx, val);
186
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
185
187
  }
186
188
  else {
187
- val = *(ep - idx);
188
- RB_DEBUG_COUNTER_INC(lvar_get);
189
- (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
189
+ val = *(ep - idx);
190
+ RB_DEBUG_COUNTER_INC(lvar_get);
191
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
190
192
  }
191
193
  }
192
- # line 193 "vm.inc"
194
+ # line 195 "vm.inc"
193
195
  # undef NAME_OF_CURRENT_INSN
194
196
 
195
197
  /* ### Instruction trailers. ### */
196
198
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
197
- CHECK_CANARY();
199
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
198
200
  INC_SP(INSN_ATTR(sp_inc));
199
201
  TOPN(0) = val;
202
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
203
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
200
204
  if (leaf) ADD_PC(INSN_ATTR(width));
201
205
  # undef INSN_ATTR
202
206
 
@@ -220,7 +224,7 @@ INSN_ENTRY(setblockparam)
220
224
 
221
225
  /* ### Instruction preambles. ### */
222
226
  if (! leaf) ADD_PC(INSN_ATTR(width));
223
- SETUP_CANARY();
227
+ SETUP_CANARY(leaf);
224
228
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
225
229
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
226
230
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
@@ -238,12 +242,12 @@ INSN_ENTRY(setblockparam)
238
242
 
239
243
  VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
240
244
  }
241
- # line 242 "vm.inc"
245
+ # line 246 "vm.inc"
242
246
  # undef NAME_OF_CURRENT_INSN
243
247
 
244
248
  /* ### Instruction trailers. ### */
245
249
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
246
- CHECK_CANARY();
250
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
247
251
  INC_SP(INSN_ATTR(sp_inc));
248
252
  if (leaf) ADD_PC(INSN_ATTR(width));
249
253
  # undef INSN_ATTR
@@ -268,7 +272,7 @@ INSN_ENTRY(getblockparamproxy)
268
272
 
269
273
  /* ### Instruction preambles. ### */
270
274
  if (! leaf) ADD_PC(INSN_ATTR(width));
271
- SETUP_CANARY();
275
+ SETUP_CANARY(leaf);
272
276
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
273
277
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
274
278
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
@@ -281,45 +285,47 @@ INSN_ENTRY(getblockparamproxy)
281
285
  VM_ASSERT(VM_ENV_LOCAL_P(ep));
282
286
 
283
287
  if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) {
284
- VALUE block_handler = VM_ENV_BLOCK_HANDLER(ep);
285
-
286
- if (block_handler) {
287
- switch (vm_block_handler_type(block_handler)) {
288
- case block_handler_type_iseq:
289
- case block_handler_type_ifunc:
290
- val = rb_block_param_proxy;
291
- break;
292
- case block_handler_type_symbol:
293
- val = rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
294
- goto INSN_LABEL(set);
295
- case block_handler_type_proc:
296
- val = VM_BH_TO_PROC(block_handler);
297
- goto INSN_LABEL(set);
298
- default:
299
- VM_UNREACHABLE(getblockparamproxy);
300
- }
301
- }
302
- else {
303
- val = Qnil;
304
- INSN_LABEL(set):
305
- vm_env_write(ep, -(int)idx, val);
306
- VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
307
- }
288
+ VALUE block_handler = VM_ENV_BLOCK_HANDLER(ep);
289
+
290
+ if (block_handler) {
291
+ switch (vm_block_handler_type(block_handler)) {
292
+ case block_handler_type_iseq:
293
+ case block_handler_type_ifunc:
294
+ val = rb_block_param_proxy;
295
+ break;
296
+ case block_handler_type_symbol:
297
+ val = rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
298
+ goto INSN_LABEL(set);
299
+ case block_handler_type_proc:
300
+ val = VM_BH_TO_PROC(block_handler);
301
+ goto INSN_LABEL(set);
302
+ default:
303
+ VM_UNREACHABLE(getblockparamproxy);
304
+ }
305
+ }
306
+ else {
307
+ val = Qnil;
308
+ INSN_LABEL(set):
309
+ vm_env_write(ep, -(int)idx, val);
310
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
311
+ }
308
312
  }
309
313
  else {
310
- val = *(ep - idx);
311
- RB_DEBUG_COUNTER_INC(lvar_get);
312
- (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
314
+ val = *(ep - idx);
315
+ RB_DEBUG_COUNTER_INC(lvar_get);
316
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
313
317
  }
314
318
  }
315
- # line 316 "vm.inc"
319
+ # line 320 "vm.inc"
316
320
  # undef NAME_OF_CURRENT_INSN
317
321
 
318
322
  /* ### Instruction trailers. ### */
319
323
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
320
- CHECK_CANARY();
324
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
321
325
  INC_SP(INSN_ATTR(sp_inc));
322
326
  TOPN(0) = val;
327
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
328
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
323
329
  if (leaf) ADD_PC(INSN_ATTR(width));
324
330
  # undef INSN_ATTR
325
331
 
@@ -343,7 +349,7 @@ INSN_ENTRY(getspecial)
343
349
 
344
350
  /* ### Instruction preambles. ### */
345
351
  if (! leaf) ADD_PC(INSN_ATTR(width));
346
- SETUP_CANARY();
352
+ SETUP_CANARY(leaf);
347
353
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
348
354
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
349
355
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, type);
@@ -354,14 +360,16 @@ INSN_ENTRY(getspecial)
354
360
  {
355
361
  val = vm_getspecial(ec, GET_LEP(), key, type);
356
362
  }
357
- # line 358 "vm.inc"
363
+ # line 364 "vm.inc"
358
364
  # undef NAME_OF_CURRENT_INSN
359
365
 
360
366
  /* ### Instruction trailers. ### */
361
367
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
362
- CHECK_CANARY();
368
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
363
369
  INC_SP(INSN_ATTR(sp_inc));
364
370
  TOPN(0) = val;
371
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
372
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
365
373
  if (leaf) ADD_PC(INSN_ATTR(width));
366
374
  # undef INSN_ATTR
367
375
 
@@ -384,7 +392,7 @@ INSN_ENTRY(setspecial)
384
392
 
385
393
  /* ### Instruction preambles. ### */
386
394
  if (! leaf) ADD_PC(INSN_ATTR(width));
387
- SETUP_CANARY();
395
+ SETUP_CANARY(leaf);
388
396
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
389
397
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
390
398
 
@@ -394,12 +402,12 @@ INSN_ENTRY(setspecial)
394
402
  {
395
403
  lep_svar_set(ec, GET_LEP(), key, obj);
396
404
  }
397
- # line 398 "vm.inc"
405
+ # line 406 "vm.inc"
398
406
  # undef NAME_OF_CURRENT_INSN
399
407
 
400
408
  /* ### Instruction trailers. ### */
401
409
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
402
- CHECK_CANARY();
410
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
403
411
  INC_SP(INSN_ATTR(sp_inc));
404
412
  if (leaf) ADD_PC(INSN_ATTR(width));
405
413
  # undef INSN_ATTR
@@ -417,14 +425,14 @@ INSN_ENTRY(getinstancevariable)
417
425
 
418
426
  /* ### Declare and assign variables. ### */
419
427
  ID id = (ID)GET_OPERAND(1);
420
- IC ic = (IC)GET_OPERAND(2);
428
+ IVC ic = (IVC)GET_OPERAND(2);
421
429
  # define INSN_ATTR(x) attr_ ## x ## _getinstancevariable(id, ic)
422
430
  bool leaf = INSN_ATTR(leaf);
423
431
  VALUE val;
424
432
 
425
433
  /* ### Instruction preambles. ### */
426
434
  if (! leaf) ADD_PC(INSN_ATTR(width));
427
- SETUP_CANARY();
435
+ SETUP_CANARY(leaf);
428
436
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
429
437
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
430
438
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ic);
@@ -433,16 +441,18 @@ INSN_ENTRY(getinstancevariable)
433
441
  # define NAME_OF_CURRENT_INSN getinstancevariable
434
442
  # line 215 "insns.def"
435
443
  {
436
- val = vm_getinstancevariable(GET_SELF(), id, ic);
444
+ val = vm_getinstancevariable(GET_ISEQ(), GET_SELF(), id, ic);
437
445
  }
438
- # line 439 "vm.inc"
446
+ # line 447 "vm.inc"
439
447
  # undef NAME_OF_CURRENT_INSN
440
448
 
441
449
  /* ### Instruction trailers. ### */
442
450
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
443
- CHECK_CANARY();
451
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
444
452
  INC_SP(INSN_ATTR(sp_inc));
445
453
  TOPN(0) = val;
454
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
455
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
446
456
  if (leaf) ADD_PC(INSN_ATTR(width));
447
457
  # undef INSN_ATTR
448
458
 
@@ -459,14 +469,14 @@ INSN_ENTRY(setinstancevariable)
459
469
 
460
470
  /* ### Declare and assign variables. ### */
461
471
  ID id = (ID)GET_OPERAND(1);
462
- IC ic = (IC)GET_OPERAND(2);
472
+ IVC ic = (IVC)GET_OPERAND(2);
463
473
  # define INSN_ATTR(x) attr_ ## x ## _setinstancevariable(id, ic)
464
474
  bool leaf = INSN_ATTR(leaf);
465
475
  VALUE val = TOPN(0);
466
476
 
467
477
  /* ### Instruction preambles. ### */
468
478
  if (! leaf) ADD_PC(INSN_ATTR(width));
469
- SETUP_CANARY();
479
+ SETUP_CANARY(leaf);
470
480
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
471
481
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
472
482
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ic);
@@ -475,14 +485,14 @@ INSN_ENTRY(setinstancevariable)
475
485
  # define NAME_OF_CURRENT_INSN setinstancevariable
476
486
  # line 226 "insns.def"
477
487
  {
478
- vm_setinstancevariable(GET_SELF(), id, val, ic);
488
+ vm_setinstancevariable(GET_ISEQ(), GET_SELF(), id, val, ic);
479
489
  }
480
- # line 481 "vm.inc"
490
+ # line 491 "vm.inc"
481
491
  # undef NAME_OF_CURRENT_INSN
482
492
 
483
493
  /* ### Instruction trailers. ### */
484
494
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
485
- CHECK_CANARY();
495
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
486
496
  INC_SP(INSN_ATTR(sp_inc));
487
497
  if (leaf) ADD_PC(INSN_ATTR(width));
488
498
  # undef INSN_ATTR
@@ -506,7 +516,7 @@ INSN_ENTRY(getclassvariable)
506
516
 
507
517
  /* ### Instruction preambles. ### */
508
518
  if (! leaf) ADD_PC(INSN_ATTR(width));
509
- SETUP_CANARY();
519
+ SETUP_CANARY(leaf);
510
520
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
511
521
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
512
522
 
@@ -514,16 +524,18 @@ INSN_ENTRY(getclassvariable)
514
524
  # define NAME_OF_CURRENT_INSN getclassvariable
515
525
  # line 238 "insns.def"
516
526
  {
517
- val = rb_cvar_get(vm_get_cvar_base(vm_get_cref(GET_EP()), GET_CFP()), id);
527
+ val = rb_cvar_get(vm_get_cvar_base(vm_get_cref(GET_EP()), GET_CFP(), 1), id);
518
528
  }
519
- # line 520 "vm.inc"
529
+ # line 530 "vm.inc"
520
530
  # undef NAME_OF_CURRENT_INSN
521
531
 
522
532
  /* ### Instruction trailers. ### */
523
533
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
524
- CHECK_CANARY();
534
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
525
535
  INC_SP(INSN_ATTR(sp_inc));
526
536
  TOPN(0) = val;
537
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
538
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
527
539
  if (leaf) ADD_PC(INSN_ATTR(width));
528
540
  # undef INSN_ATTR
529
541
 
@@ -546,7 +558,7 @@ INSN_ENTRY(setclassvariable)
546
558
 
547
559
  /* ### Instruction preambles. ### */
548
560
  if (! leaf) ADD_PC(INSN_ATTR(width));
549
- SETUP_CANARY();
561
+ SETUP_CANARY(leaf);
550
562
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
551
563
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
552
564
 
@@ -555,14 +567,14 @@ INSN_ENTRY(setclassvariable)
555
567
  # line 250 "insns.def"
556
568
  {
557
569
  vm_ensure_not_refinement_module(GET_SELF());
558
- rb_cvar_set(vm_get_cvar_base(vm_get_cref(GET_EP()), GET_CFP()), id, val);
570
+ rb_cvar_set(vm_get_cvar_base(vm_get_cref(GET_EP()), GET_CFP(), 1), id, val);
559
571
  }
560
- # line 561 "vm.inc"
572
+ # line 573 "vm.inc"
561
573
  # undef NAME_OF_CURRENT_INSN
562
574
 
563
575
  /* ### Instruction trailers. ### */
564
576
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
565
- CHECK_CANARY();
577
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
566
578
  INC_SP(INSN_ATTR(sp_inc));
567
579
  if (leaf) ADD_PC(INSN_ATTR(width));
568
580
  # undef INSN_ATTR
@@ -588,7 +600,7 @@ INSN_ENTRY(getconstant)
588
600
 
589
601
  /* ### Instruction preambles. ### */
590
602
  if (! leaf) ADD_PC(INSN_ATTR(width));
591
- SETUP_CANARY();
603
+ SETUP_CANARY(leaf);
592
604
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
593
605
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
594
606
 
@@ -598,14 +610,16 @@ INSN_ENTRY(getconstant)
598
610
  {
599
611
  val = vm_get_ev_const(ec, klass, id, allow_nil == Qtrue, 0);
600
612
  }
601
- # line 602 "vm.inc"
613
+ # line 614 "vm.inc"
602
614
  # undef NAME_OF_CURRENT_INSN
603
615
 
604
616
  /* ### Instruction trailers. ### */
605
617
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
606
- CHECK_CANARY();
618
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
607
619
  INC_SP(INSN_ATTR(sp_inc));
608
620
  TOPN(0) = val;
621
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
622
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
609
623
  if (leaf) ADD_PC(INSN_ATTR(width));
610
624
  # undef INSN_ATTR
611
625
 
@@ -629,7 +643,7 @@ INSN_ENTRY(setconstant)
629
643
 
630
644
  /* ### Instruction preambles. ### */
631
645
  if (! leaf) ADD_PC(INSN_ATTR(width));
632
- SETUP_CANARY();
646
+ SETUP_CANARY(leaf);
633
647
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
634
648
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
635
649
 
@@ -641,12 +655,12 @@ INSN_ENTRY(setconstant)
641
655
  vm_ensure_not_refinement_module(GET_SELF());
642
656
  rb_const_set(cbase, id, val);
643
657
  }
644
- # line 645 "vm.inc"
658
+ # line 659 "vm.inc"
645
659
  # undef NAME_OF_CURRENT_INSN
646
660
 
647
661
  /* ### Instruction trailers. ### */
648
662
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
649
- CHECK_CANARY();
663
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
650
664
  INC_SP(INSN_ATTR(sp_inc));
651
665
  if (leaf) ADD_PC(INSN_ATTR(width));
652
666
  # undef INSN_ATTR
@@ -655,7 +669,7 @@ INSN_ENTRY(setconstant)
655
669
  END_INSN(setconstant);
656
670
  }
657
671
 
658
- /* insn getglobal(entry)()(val) */
672
+ /* insn getglobal(gid)()(val) */
659
673
  INSN_ENTRY(getglobal)
660
674
  {
661
675
  /* ### Declare that we have just entered into an instruction. ### */
@@ -663,32 +677,33 @@ INSN_ENTRY(getglobal)
663
677
  DEBUG_ENTER_INSN("getglobal");
664
678
 
665
679
  /* ### Declare and assign variables. ### */
666
- GENTRY entry = (GENTRY)GET_OPERAND(1);
667
- # define INSN_ATTR(x) attr_ ## x ## _getglobal(entry)
680
+ ID gid = (ID)GET_OPERAND(1);
681
+ # define INSN_ATTR(x) attr_ ## x ## _getglobal(gid)
668
682
  bool leaf = INSN_ATTR(leaf);
669
683
  VALUE val;
670
684
 
671
685
  /* ### Instruction preambles. ### */
672
686
  if (! leaf) ADD_PC(INSN_ATTR(width));
673
- SETUP_CANARY();
687
+ SETUP_CANARY(leaf);
674
688
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
675
- COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, entry);
689
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, gid);
676
690
 
677
691
  /* ### Here we do the instruction body. ### */
678
692
  # define NAME_OF_CURRENT_INSN getglobal
679
693
  # line 295 "insns.def"
680
694
  {
681
- struct rb_global_entry *gentry = (void *)entry;
682
- val = rb_gvar_get(gentry);
695
+ val = rb_gvar_get(gid);
683
696
  }
684
- # line 685 "vm.inc"
697
+ # line 698 "vm.inc"
685
698
  # undef NAME_OF_CURRENT_INSN
686
699
 
687
700
  /* ### Instruction trailers. ### */
688
701
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
689
- CHECK_CANARY();
702
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
690
703
  INC_SP(INSN_ATTR(sp_inc));
691
704
  TOPN(0) = val;
705
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
706
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
692
707
  if (leaf) ADD_PC(INSN_ATTR(width));
693
708
  # undef INSN_ATTR
694
709
 
@@ -696,7 +711,7 @@ INSN_ENTRY(getglobal)
696
711
  END_INSN(getglobal);
697
712
  }
698
713
 
699
- /* insn setglobal(entry)(val)() */
714
+ /* insn setglobal(gid)(val)() */
700
715
  INSN_ENTRY(setglobal)
701
716
  {
702
717
  /* ### Declare that we have just entered into an instruction. ### */
@@ -704,30 +719,29 @@ INSN_ENTRY(setglobal)
704
719
  DEBUG_ENTER_INSN("setglobal");
705
720
 
706
721
  /* ### Declare and assign variables. ### */
707
- GENTRY entry = (GENTRY)GET_OPERAND(1);
708
- # define INSN_ATTR(x) attr_ ## x ## _setglobal(entry)
722
+ ID gid = (ID)GET_OPERAND(1);
723
+ # define INSN_ATTR(x) attr_ ## x ## _setglobal(gid)
709
724
  bool leaf = INSN_ATTR(leaf);
710
725
  VALUE val = TOPN(0);
711
726
 
712
727
  /* ### Instruction preambles. ### */
713
728
  if (! leaf) ADD_PC(INSN_ATTR(width));
714
- SETUP_CANARY();
729
+ SETUP_CANARY(leaf);
715
730
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
716
- COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, entry);
731
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, gid);
717
732
 
718
733
  /* ### Here we do the instruction body. ### */
719
734
  # define NAME_OF_CURRENT_INSN setglobal
720
- # line 307 "insns.def"
735
+ # line 306 "insns.def"
721
736
  {
722
- struct rb_global_entry *gentry = (void *)entry;
723
- rb_gvar_set(gentry, val);
737
+ rb_gvar_set(gid, val);
724
738
  }
725
- # line 726 "vm.inc"
739
+ # line 740 "vm.inc"
726
740
  # undef NAME_OF_CURRENT_INSN
727
741
 
728
742
  /* ### Instruction trailers. ### */
729
743
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
730
- CHECK_CANARY();
744
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
731
745
  INC_SP(INSN_ATTR(sp_inc));
732
746
  if (leaf) ADD_PC(INSN_ATTR(width));
733
747
  # undef INSN_ATTR
@@ -750,23 +764,25 @@ INSN_ENTRY(putnil)
750
764
 
751
765
  /* ### Instruction preambles. ### */
752
766
  if (! leaf) ADD_PC(INSN_ATTR(width));
753
- SETUP_CANARY();
767
+ SETUP_CANARY(leaf);
754
768
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
755
769
 
756
770
  /* ### Here we do the instruction body. ### */
757
771
  # define NAME_OF_CURRENT_INSN putnil
758
- # line 322 "insns.def"
772
+ # line 320 "insns.def"
759
773
  {
760
774
  val = Qnil;
761
775
  }
762
- # line 763 "vm.inc"
776
+ # line 777 "vm.inc"
763
777
  # undef NAME_OF_CURRENT_INSN
764
778
 
765
779
  /* ### Instruction trailers. ### */
766
780
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
767
- CHECK_CANARY();
781
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
768
782
  INC_SP(INSN_ATTR(sp_inc));
769
783
  TOPN(0) = val;
784
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
785
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
770
786
  if (leaf) ADD_PC(INSN_ATTR(width));
771
787
  # undef INSN_ATTR
772
788
 
@@ -788,23 +804,25 @@ INSN_ENTRY(putself)
788
804
 
789
805
  /* ### Instruction preambles. ### */
790
806
  if (! leaf) ADD_PC(INSN_ATTR(width));
791
- SETUP_CANARY();
807
+ SETUP_CANARY(leaf);
792
808
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
793
809
 
794
810
  /* ### Here we do the instruction body. ### */
795
811
  # define NAME_OF_CURRENT_INSN putself
796
- # line 332 "insns.def"
812
+ # line 330 "insns.def"
797
813
  {
798
814
  val = GET_SELF();
799
815
  }
800
- # line 801 "vm.inc"
816
+ # line 817 "vm.inc"
801
817
  # undef NAME_OF_CURRENT_INSN
802
818
 
803
819
  /* ### Instruction trailers. ### */
804
820
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
805
- CHECK_CANARY();
821
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
806
822
  INC_SP(INSN_ATTR(sp_inc));
807
823
  TOPN(0) = val;
824
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
825
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
808
826
  if (leaf) ADD_PC(INSN_ATTR(width));
809
827
  # undef INSN_ATTR
810
828
 
@@ -833,6 +851,8 @@ INSN_ENTRY(putobject)
833
851
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
834
852
  INC_SP(INSN_ATTR(sp_inc));
835
853
  TOPN(0) = val;
854
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
855
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
836
856
  if (leaf) ADD_PC(INSN_ATTR(width));
837
857
  # undef INSN_ATTR
838
858
 
@@ -855,27 +875,29 @@ INSN_ENTRY(putspecialobject)
855
875
 
856
876
  /* ### Instruction preambles. ### */
857
877
  if (! leaf) ADD_PC(INSN_ATTR(width));
858
- SETUP_CANARY();
878
+ SETUP_CANARY(leaf);
859
879
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
860
880
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, value_type);
861
881
 
862
882
  /* ### Here we do the instruction body. ### */
863
883
  # define NAME_OF_CURRENT_INSN putspecialobject
864
- # line 354 "insns.def"
884
+ # line 352 "insns.def"
865
885
  {
866
886
  enum vm_special_object_type type;
867
887
 
868
888
  type = (enum vm_special_object_type)value_type;
869
889
  val = vm_get_special_object(GET_EP(), type);
870
890
  }
871
- # line 872 "vm.inc"
891
+ # line 892 "vm.inc"
872
892
  # undef NAME_OF_CURRENT_INSN
873
893
 
874
894
  /* ### Instruction trailers. ### */
875
895
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
876
- CHECK_CANARY();
896
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
877
897
  INC_SP(INSN_ATTR(sp_inc));
878
898
  TOPN(0) = val;
899
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
900
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
879
901
  if (leaf) ADD_PC(INSN_ATTR(width));
880
902
  # undef INSN_ATTR
881
903
 
@@ -898,24 +920,26 @@ INSN_ENTRY(putstring)
898
920
 
899
921
  /* ### Instruction preambles. ### */
900
922
  if (! leaf) ADD_PC(INSN_ATTR(width));
901
- SETUP_CANARY();
923
+ SETUP_CANARY(leaf);
902
924
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
903
925
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
904
926
 
905
927
  /* ### Here we do the instruction body. ### */
906
928
  # define NAME_OF_CURRENT_INSN putstring
907
- # line 367 "insns.def"
929
+ # line 365 "insns.def"
908
930
  {
909
- val = rb_str_resurrect(str);
931
+ val = rb_ec_str_resurrect(ec, str);
910
932
  }
911
- # line 912 "vm.inc"
933
+ # line 934 "vm.inc"
912
934
  # undef NAME_OF_CURRENT_INSN
913
935
 
914
936
  /* ### Instruction trailers. ### */
915
937
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
916
- CHECK_CANARY();
938
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
917
939
  INC_SP(INSN_ATTR(sp_inc));
918
940
  TOPN(0) = val;
941
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
942
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
919
943
  if (leaf) ADD_PC(INSN_ATTR(width));
920
944
  # undef INSN_ATTR
921
945
 
@@ -938,24 +962,26 @@ INSN_ENTRY(concatstrings)
938
962
 
939
963
  /* ### Instruction preambles. ### */
940
964
  if (! leaf) ADD_PC(INSN_ATTR(width));
941
- SETUP_CANARY();
965
+ SETUP_CANARY(leaf);
942
966
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
943
967
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
944
968
 
945
969
  /* ### Here we do the instruction body. ### */
946
970
  # define NAME_OF_CURRENT_INSN concatstrings
947
- # line 381 "insns.def"
971
+ # line 379 "insns.def"
948
972
  {
949
973
  val = rb_str_concat_literals(num, STACK_ADDR_FROM_TOP(num));
950
974
  }
951
- # line 952 "vm.inc"
975
+ # line 976 "vm.inc"
952
976
  # undef NAME_OF_CURRENT_INSN
953
977
 
954
978
  /* ### Instruction trailers. ### */
955
979
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
956
- CHECK_CANARY();
980
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
957
981
  INC_SP(INSN_ATTR(sp_inc));
958
982
  TOPN(0) = val;
983
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
984
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
959
985
  if (leaf) ADD_PC(INSN_ATTR(width));
960
986
  # undef INSN_ATTR
961
987
 
@@ -978,23 +1004,25 @@ INSN_ENTRY(tostring)
978
1004
 
979
1005
  /* ### Instruction preambles. ### */
980
1006
  if (! leaf) ADD_PC(INSN_ATTR(width));
981
- SETUP_CANARY();
1007
+ SETUP_CANARY(leaf);
982
1008
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
983
1009
 
984
1010
  /* ### Here we do the instruction body. ### */
985
1011
  # define NAME_OF_CURRENT_INSN tostring
986
- # line 391 "insns.def"
1012
+ # line 389 "insns.def"
987
1013
  {
988
1014
  val = rb_obj_as_string_result(str, val);
989
1015
  }
990
- # line 991 "vm.inc"
1016
+ # line 1017 "vm.inc"
991
1017
  # undef NAME_OF_CURRENT_INSN
992
1018
 
993
1019
  /* ### Instruction trailers. ### */
994
1020
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
995
- CHECK_CANARY();
1021
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
996
1022
  INC_SP(INSN_ATTR(sp_inc));
997
1023
  TOPN(0) = val;
1024
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1025
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
998
1026
  if (leaf) ADD_PC(INSN_ATTR(width));
999
1027
  # undef INSN_ATTR
1000
1028
 
@@ -1002,46 +1030,6 @@ INSN_ENTRY(tostring)
1002
1030
  END_INSN(tostring);
1003
1031
  }
1004
1032
 
1005
- /* insn freezestring(debug_info)(str)(str) */
1006
- INSN_ENTRY(freezestring)
1007
- {
1008
- /* ### Declare that we have just entered into an instruction. ### */
1009
- START_OF_ORIGINAL_INSN(freezestring);
1010
- DEBUG_ENTER_INSN("freezestring");
1011
-
1012
- /* ### Declare and assign variables. ### */
1013
- VALUE debug_info = (VALUE)GET_OPERAND(1);
1014
- # define INSN_ATTR(x) attr_ ## x ## _freezestring(debug_info)
1015
- bool leaf = INSN_ATTR(leaf);
1016
- VALUE str = TOPN(0);
1017
-
1018
- /* ### Instruction preambles. ### */
1019
- if (! leaf) ADD_PC(INSN_ATTR(width));
1020
- SETUP_CANARY();
1021
- COLLECT_USAGE_INSN(INSN_ATTR(bin));
1022
- COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, debug_info);
1023
-
1024
- /* ### Here we do the instruction body. ### */
1025
- # define NAME_OF_CURRENT_INSN freezestring
1026
- # line 401 "insns.def"
1027
- {
1028
- vm_freezestring(str, debug_info);
1029
- }
1030
- # line 1031 "vm.inc"
1031
- # undef NAME_OF_CURRENT_INSN
1032
-
1033
- /* ### Instruction trailers. ### */
1034
- CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1035
- CHECK_CANARY();
1036
- INC_SP(INSN_ATTR(sp_inc));
1037
- TOPN(0) = str;
1038
- if (leaf) ADD_PC(INSN_ATTR(width));
1039
- # undef INSN_ATTR
1040
-
1041
- /* ### Leave the instruction. ### */
1042
- END_INSN(freezestring);
1043
- }
1044
-
1045
1033
  /* insn toregexp(opt, cnt)(...)(val) */
1046
1034
  INSN_ENTRY(toregexp)
1047
1035
  {
@@ -1058,27 +1046,29 @@ INSN_ENTRY(toregexp)
1058
1046
 
1059
1047
  /* ### Instruction preambles. ### */
1060
1048
  if (! leaf) ADD_PC(INSN_ATTR(width));
1061
- SETUP_CANARY();
1049
+ SETUP_CANARY(leaf);
1062
1050
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1063
1051
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, opt);
1064
1052
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cnt);
1065
1053
 
1066
1054
  /* ### Here we do the instruction body. ### */
1067
1055
  # define NAME_OF_CURRENT_INSN toregexp
1068
- # line 417 "insns.def"
1056
+ # line 405 "insns.def"
1069
1057
  {
1070
1058
  const VALUE ary = rb_ary_tmp_new_from_values(0, cnt, STACK_ADDR_FROM_TOP(cnt));
1071
1059
  val = rb_reg_new_ary(ary, (int)opt);
1072
1060
  rb_ary_clear(ary);
1073
1061
  }
1074
- # line 1075 "vm.inc"
1062
+ # line 1063 "vm.inc"
1075
1063
  # undef NAME_OF_CURRENT_INSN
1076
1064
 
1077
1065
  /* ### Instruction trailers. ### */
1078
1066
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1079
- CHECK_CANARY();
1067
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1080
1068
  INC_SP(INSN_ATTR(sp_inc));
1081
1069
  TOPN(0) = val;
1070
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1071
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1082
1072
  if (leaf) ADD_PC(INSN_ATTR(width));
1083
1073
  # undef INSN_ATTR
1084
1074
 
@@ -1101,23 +1091,25 @@ INSN_ENTRY(intern)
1101
1091
 
1102
1092
  /* ### Instruction preambles. ### */
1103
1093
  if (! leaf) ADD_PC(INSN_ATTR(width));
1104
- SETUP_CANARY();
1094
+ SETUP_CANARY(leaf);
1105
1095
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1106
1096
 
1107
1097
  /* ### Here we do the instruction body. ### */
1108
1098
  # define NAME_OF_CURRENT_INSN intern
1109
- # line 429 "insns.def"
1099
+ # line 417 "insns.def"
1110
1100
  {
1111
1101
  sym = rb_str_intern(str);
1112
1102
  }
1113
- # line 1114 "vm.inc"
1103
+ # line 1104 "vm.inc"
1114
1104
  # undef NAME_OF_CURRENT_INSN
1115
1105
 
1116
1106
  /* ### Instruction trailers. ### */
1117
1107
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1118
- CHECK_CANARY();
1108
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1119
1109
  INC_SP(INSN_ATTR(sp_inc));
1120
1110
  TOPN(0) = sym;
1111
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1112
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1121
1113
  if (leaf) ADD_PC(INSN_ATTR(width));
1122
1114
  # undef INSN_ATTR
1123
1115
 
@@ -1140,24 +1132,26 @@ INSN_ENTRY(newarray)
1140
1132
 
1141
1133
  /* ### Instruction preambles. ### */
1142
1134
  if (! leaf) ADD_PC(INSN_ATTR(width));
1143
- SETUP_CANARY();
1135
+ SETUP_CANARY(leaf);
1144
1136
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1145
1137
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1146
1138
 
1147
1139
  /* ### Here we do the instruction body. ### */
1148
1140
  # define NAME_OF_CURRENT_INSN newarray
1149
- # line 440 "insns.def"
1141
+ # line 428 "insns.def"
1150
1142
  {
1151
- val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
1143
+ val = rb_ec_ary_new_from_values(ec, num, STACK_ADDR_FROM_TOP(num));
1152
1144
  }
1153
- # line 1154 "vm.inc"
1145
+ # line 1146 "vm.inc"
1154
1146
  # undef NAME_OF_CURRENT_INSN
1155
1147
 
1156
1148
  /* ### Instruction trailers. ### */
1157
1149
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1158
- CHECK_CANARY();
1150
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1159
1151
  INC_SP(INSN_ATTR(sp_inc));
1160
1152
  TOPN(0) = val;
1153
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1154
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1161
1155
  if (leaf) ADD_PC(INSN_ATTR(width));
1162
1156
  # undef INSN_ATTR
1163
1157
 
@@ -1180,13 +1174,13 @@ INSN_ENTRY(newarraykwsplat)
1180
1174
 
1181
1175
  /* ### Instruction preambles. ### */
1182
1176
  if (! leaf) ADD_PC(INSN_ATTR(width));
1183
- SETUP_CANARY();
1177
+ SETUP_CANARY(leaf);
1184
1178
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1185
1179
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1186
1180
 
1187
1181
  /* ### Here we do the instruction body. ### */
1188
1182
  # define NAME_OF_CURRENT_INSN newarraykwsplat
1189
- # line 455 "insns.def"
1183
+ # line 443 "insns.def"
1190
1184
  {
1191
1185
  if (RHASH_EMPTY_P(*STACK_ADDR_FROM_TOP(1))) {
1192
1186
  val = rb_ary_new4(num-1, STACK_ADDR_FROM_TOP(num));
@@ -1195,14 +1189,16 @@ INSN_ENTRY(newarraykwsplat)
1195
1189
  val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
1196
1190
  }
1197
1191
  }
1198
- # line 1199 "vm.inc"
1192
+ # line 1193 "vm.inc"
1199
1193
  # undef NAME_OF_CURRENT_INSN
1200
1194
 
1201
1195
  /* ### Instruction trailers. ### */
1202
1196
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1203
- CHECK_CANARY();
1197
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1204
1198
  INC_SP(INSN_ATTR(sp_inc));
1205
1199
  TOPN(0) = val;
1200
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1201
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1206
1202
  if (leaf) ADD_PC(INSN_ATTR(width));
1207
1203
  # undef INSN_ATTR
1208
1204
 
@@ -1225,25 +1221,27 @@ INSN_ENTRY(duparray)
1225
1221
 
1226
1222
  /* ### Instruction preambles. ### */
1227
1223
  if (! leaf) ADD_PC(INSN_ATTR(width));
1228
- SETUP_CANARY();
1224
+ SETUP_CANARY(leaf);
1229
1225
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1230
1226
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ary);
1231
1227
 
1232
1228
  /* ### Here we do the instruction body. ### */
1233
1229
  # define NAME_OF_CURRENT_INSN duparray
1234
- # line 470 "insns.def"
1230
+ # line 458 "insns.def"
1235
1231
  {
1236
1232
  RUBY_DTRACE_CREATE_HOOK(ARRAY, RARRAY_LEN(ary));
1237
1233
  val = rb_ary_resurrect(ary);
1238
1234
  }
1239
- # line 1240 "vm.inc"
1235
+ # line 1236 "vm.inc"
1240
1236
  # undef NAME_OF_CURRENT_INSN
1241
1237
 
1242
1238
  /* ### Instruction trailers. ### */
1243
1239
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1244
- CHECK_CANARY();
1240
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1245
1241
  INC_SP(INSN_ATTR(sp_inc));
1246
1242
  TOPN(0) = val;
1243
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1244
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1247
1245
  if (leaf) ADD_PC(INSN_ATTR(width));
1248
1246
  # undef INSN_ATTR
1249
1247
 
@@ -1266,25 +1264,27 @@ INSN_ENTRY(duphash)
1266
1264
 
1267
1265
  /* ### Instruction preambles. ### */
1268
1266
  if (! leaf) ADD_PC(INSN_ATTR(width));
1269
- SETUP_CANARY();
1267
+ SETUP_CANARY(leaf);
1270
1268
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1271
1269
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
1272
1270
 
1273
1271
  /* ### Here we do the instruction body. ### */
1274
1272
  # define NAME_OF_CURRENT_INSN duphash
1275
- # line 481 "insns.def"
1273
+ # line 469 "insns.def"
1276
1274
  {
1277
1275
  RUBY_DTRACE_CREATE_HOOK(HASH, RHASH_SIZE(hash) << 1);
1278
1276
  val = rb_hash_resurrect(hash);
1279
1277
  }
1280
- # line 1281 "vm.inc"
1278
+ # line 1279 "vm.inc"
1281
1279
  # undef NAME_OF_CURRENT_INSN
1282
1280
 
1283
1281
  /* ### Instruction trailers. ### */
1284
1282
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1285
- CHECK_CANARY();
1283
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1286
1284
  INC_SP(INSN_ATTR(sp_inc));
1287
1285
  TOPN(0) = val;
1286
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1287
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1288
1288
  if (leaf) ADD_PC(INSN_ATTR(width));
1289
1289
  # undef INSN_ATTR
1290
1290
 
@@ -1314,7 +1314,7 @@ INSN_ENTRY(expandarray)
1314
1314
 
1315
1315
  /* ### Here we do the instruction body. ### */
1316
1316
  # define NAME_OF_CURRENT_INSN expandarray
1317
- # line 502 "insns.def"
1317
+ # line 490 "insns.def"
1318
1318
  {
1319
1319
  vm_expandarray(GET_SP(), ary, num, (int)flag);
1320
1320
  }
@@ -1347,12 +1347,12 @@ INSN_ENTRY(concatarray)
1347
1347
 
1348
1348
  /* ### Instruction preambles. ### */
1349
1349
  if (! leaf) ADD_PC(INSN_ATTR(width));
1350
- SETUP_CANARY();
1350
+ SETUP_CANARY(leaf);
1351
1351
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1352
1352
 
1353
1353
  /* ### Here we do the instruction body. ### */
1354
1354
  # define NAME_OF_CURRENT_INSN concatarray
1355
- # line 513 "insns.def"
1355
+ # line 501 "insns.def"
1356
1356
  {
1357
1357
  ary = vm_concat_array(ary1, ary2);
1358
1358
  }
@@ -1361,9 +1361,11 @@ INSN_ENTRY(concatarray)
1361
1361
 
1362
1362
  /* ### Instruction trailers. ### */
1363
1363
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1364
- CHECK_CANARY();
1364
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1365
1365
  INC_SP(INSN_ATTR(sp_inc));
1366
1366
  TOPN(0) = ary;
1367
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1368
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1367
1369
  if (leaf) ADD_PC(INSN_ATTR(width));
1368
1370
  # undef INSN_ATTR
1369
1371
 
@@ -1387,24 +1389,26 @@ INSN_ENTRY(splatarray)
1387
1389
 
1388
1390
  /* ### Instruction preambles. ### */
1389
1391
  if (! leaf) ADD_PC(INSN_ATTR(width));
1390
- SETUP_CANARY();
1392
+ SETUP_CANARY(leaf);
1391
1393
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1392
1394
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1393
1395
 
1394
1396
  /* ### Here we do the instruction body. ### */
1395
1397
  # define NAME_OF_CURRENT_INSN splatarray
1396
- # line 524 "insns.def"
1398
+ # line 512 "insns.def"
1397
1399
  {
1398
1400
  obj = vm_splat_array(flag, ary);
1399
1401
  }
1400
- # line 1401 "vm.inc"
1402
+ # line 1403 "vm.inc"
1401
1403
  # undef NAME_OF_CURRENT_INSN
1402
1404
 
1403
1405
  /* ### Instruction trailers. ### */
1404
1406
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1405
- CHECK_CANARY();
1407
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1406
1408
  INC_SP(INSN_ATTR(sp_inc));
1407
1409
  TOPN(0) = obj;
1410
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1411
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1408
1412
  if (leaf) ADD_PC(INSN_ATTR(width));
1409
1413
  # undef INSN_ATTR
1410
1414
 
@@ -1427,13 +1431,13 @@ INSN_ENTRY(newhash)
1427
1431
 
1428
1432
  /* ### Instruction preambles. ### */
1429
1433
  if (! leaf) ADD_PC(INSN_ATTR(width));
1430
- SETUP_CANARY();
1434
+ SETUP_CANARY(leaf);
1431
1435
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1432
1436
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1433
1437
 
1434
1438
  /* ### Here we do the instruction body. ### */
1435
1439
  # define NAME_OF_CURRENT_INSN newhash
1436
- # line 536 "insns.def"
1440
+ # line 524 "insns.def"
1437
1441
  {
1438
1442
  RUBY_DTRACE_CREATE_HOOK(HASH, num);
1439
1443
 
@@ -1443,14 +1447,16 @@ INSN_ENTRY(newhash)
1443
1447
  rb_hash_bulk_insert(num, STACK_ADDR_FROM_TOP(num), val);
1444
1448
  }
1445
1449
  }
1446
- # line 1447 "vm.inc"
1450
+ # line 1451 "vm.inc"
1447
1451
  # undef NAME_OF_CURRENT_INSN
1448
1452
 
1449
1453
  /* ### Instruction trailers. ### */
1450
1454
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1451
- CHECK_CANARY();
1455
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1452
1456
  INC_SP(INSN_ATTR(sp_inc));
1453
1457
  TOPN(0) = val;
1458
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1459
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1454
1460
  if (leaf) ADD_PC(INSN_ATTR(width));
1455
1461
  # undef INSN_ATTR
1456
1462
 
@@ -1475,24 +1481,26 @@ INSN_ENTRY(newrange)
1475
1481
 
1476
1482
  /* ### Instruction preambles. ### */
1477
1483
  if (! leaf) ADD_PC(INSN_ATTR(width));
1478
- SETUP_CANARY();
1484
+ SETUP_CANARY(leaf);
1479
1485
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1480
1486
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1481
1487
 
1482
1488
  /* ### Here we do the instruction body. ### */
1483
1489
  # define NAME_OF_CURRENT_INSN newrange
1484
- # line 554 "insns.def"
1490
+ # line 542 "insns.def"
1485
1491
  {
1486
1492
  val = rb_range_new(low, high, (int)flag);
1487
1493
  }
1488
- # line 1489 "vm.inc"
1494
+ # line 1495 "vm.inc"
1489
1495
  # undef NAME_OF_CURRENT_INSN
1490
1496
 
1491
1497
  /* ### Instruction trailers. ### */
1492
1498
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1493
- CHECK_CANARY();
1499
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1494
1500
  INC_SP(INSN_ATTR(sp_inc));
1495
1501
  TOPN(0) = val;
1502
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1503
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1496
1504
  if (leaf) ADD_PC(INSN_ATTR(width));
1497
1505
  # undef INSN_ATTR
1498
1506
 
@@ -1514,22 +1522,22 @@ INSN_ENTRY(pop)
1514
1522
 
1515
1523
  /* ### Instruction preambles. ### */
1516
1524
  if (! leaf) ADD_PC(INSN_ATTR(width));
1517
- SETUP_CANARY();
1525
+ SETUP_CANARY(leaf);
1518
1526
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1519
1527
 
1520
1528
  /* ### Here we do the instruction body. ### */
1521
1529
  # define NAME_OF_CURRENT_INSN pop
1522
- # line 568 "insns.def"
1530
+ # line 556 "insns.def"
1523
1531
  {
1524
1532
  (void)val;
1525
1533
  /* none */
1526
1534
  }
1527
- # line 1528 "vm.inc"
1535
+ # line 1536 "vm.inc"
1528
1536
  # undef NAME_OF_CURRENT_INSN
1529
1537
 
1530
1538
  /* ### Instruction trailers. ### */
1531
1539
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1532
- CHECK_CANARY();
1540
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1533
1541
  INC_SP(INSN_ATTR(sp_inc));
1534
1542
  if (leaf) ADD_PC(INSN_ATTR(width));
1535
1543
  # undef INSN_ATTR
@@ -1554,24 +1562,28 @@ INSN_ENTRY(dup)
1554
1562
 
1555
1563
  /* ### Instruction preambles. ### */
1556
1564
  if (! leaf) ADD_PC(INSN_ATTR(width));
1557
- SETUP_CANARY();
1565
+ SETUP_CANARY(leaf);
1558
1566
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1559
1567
 
1560
1568
  /* ### Here we do the instruction body. ### */
1561
1569
  # define NAME_OF_CURRENT_INSN dup
1562
- # line 579 "insns.def"
1570
+ # line 567 "insns.def"
1563
1571
  {
1564
1572
  val1 = val2 = val;
1565
1573
  }
1566
- # line 1567 "vm.inc"
1574
+ # line 1575 "vm.inc"
1567
1575
  # undef NAME_OF_CURRENT_INSN
1568
1576
 
1569
1577
  /* ### Instruction trailers. ### */
1570
1578
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1571
- CHECK_CANARY();
1579
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1572
1580
  INC_SP(INSN_ATTR(sp_inc));
1573
1581
  TOPN(0) = val2;
1582
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1583
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1574
1584
  TOPN(1) = val1;
1585
+ VM_ASSERT(!RB_TYPE_P(TOPN(1), T_NONE));
1586
+ VM_ASSERT(!RB_TYPE_P(TOPN(1), T_MOVED));
1575
1587
  if (leaf) ADD_PC(INSN_ATTR(width));
1576
1588
  # undef INSN_ATTR
1577
1589
 
@@ -1598,14 +1610,14 @@ INSN_ENTRY(dupn)
1598
1610
 
1599
1611
  /* ### Here we do the instruction body. ### */
1600
1612
  # define NAME_OF_CURRENT_INSN dupn
1601
- # line 590 "insns.def"
1613
+ # line 578 "insns.def"
1602
1614
  {
1603
1615
  void *dst = GET_SP();
1604
1616
  void *src = STACK_ADDR_FROM_TOP(n);
1605
1617
 
1606
1618
  MEMCPY(dst, src, VALUE, n);
1607
1619
  }
1608
- # line 1609 "vm.inc"
1620
+ # line 1621 "vm.inc"
1609
1621
  # undef NAME_OF_CURRENT_INSN
1610
1622
 
1611
1623
  /* ### Instruction trailers. ### */
@@ -1639,7 +1651,11 @@ INSN_ENTRY(swap)
1639
1651
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1640
1652
  INC_SP(INSN_ATTR(sp_inc));
1641
1653
  TOPN(0) = val;
1654
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1655
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1642
1656
  TOPN(1) = obj;
1657
+ VM_ASSERT(!RB_TYPE_P(TOPN(1), T_NONE));
1658
+ VM_ASSERT(!RB_TYPE_P(TOPN(1), T_MOVED));
1643
1659
  if (leaf) ADD_PC(INSN_ATTR(width));
1644
1660
  # undef INSN_ATTR
1645
1661
 
@@ -1666,19 +1682,19 @@ INSN_ENTRY(reverse)
1666
1682
 
1667
1683
  /* ### Here we do the instruction body. ### */
1668
1684
  # define NAME_OF_CURRENT_INSN reverse
1669
- # line 614 "insns.def"
1685
+ # line 602 "insns.def"
1670
1686
  {
1671
1687
  rb_num_t i;
1672
1688
  VALUE *sp = STACK_ADDR_FROM_TOP(n);
1673
1689
 
1674
1690
  for (i=0; i<n/2; i++) {
1675
- VALUE v0 = sp[i];
1676
- VALUE v1 = TOPN(i);
1677
- sp[i] = v1;
1678
- TOPN(i) = v0;
1691
+ VALUE v0 = sp[i];
1692
+ VALUE v1 = TOPN(i);
1693
+ sp[i] = v1;
1694
+ TOPN(i) = v0;
1679
1695
  }
1680
1696
  }
1681
- # line 1682 "vm.inc"
1697
+ # line 1698 "vm.inc"
1682
1698
  # undef NAME_OF_CURRENT_INSN
1683
1699
 
1684
1700
  /* ### Instruction trailers. ### */
@@ -1706,24 +1722,26 @@ INSN_ENTRY(topn)
1706
1722
 
1707
1723
  /* ### Instruction preambles. ### */
1708
1724
  if (! leaf) ADD_PC(INSN_ATTR(width));
1709
- SETUP_CANARY();
1725
+ SETUP_CANARY(leaf);
1710
1726
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1711
1727
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1712
1728
 
1713
1729
  /* ### Here we do the instruction body. ### */
1714
1730
  # define NAME_OF_CURRENT_INSN topn
1715
- # line 644 "insns.def"
1731
+ # line 632 "insns.def"
1716
1732
  {
1717
1733
  val = TOPN(n);
1718
1734
  }
1719
- # line 1720 "vm.inc"
1735
+ # line 1736 "vm.inc"
1720
1736
  # undef NAME_OF_CURRENT_INSN
1721
1737
 
1722
1738
  /* ### Instruction trailers. ### */
1723
1739
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1724
- CHECK_CANARY();
1740
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1725
1741
  INC_SP(INSN_ATTR(sp_inc));
1726
1742
  TOPN(0) = val;
1743
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1744
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1727
1745
  if (leaf) ADD_PC(INSN_ATTR(width));
1728
1746
  # undef INSN_ATTR
1729
1747
 
@@ -1746,24 +1764,26 @@ INSN_ENTRY(setn)
1746
1764
 
1747
1765
  /* ### Instruction preambles. ### */
1748
1766
  if (! leaf) ADD_PC(INSN_ATTR(width));
1749
- SETUP_CANARY();
1767
+ SETUP_CANARY(leaf);
1750
1768
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1751
1769
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1752
1770
 
1753
1771
  /* ### Here we do the instruction body. ### */
1754
1772
  # define NAME_OF_CURRENT_INSN setn
1755
- # line 655 "insns.def"
1773
+ # line 643 "insns.def"
1756
1774
  {
1757
1775
  TOPN(n) = val;
1758
1776
  }
1759
- # line 1760 "vm.inc"
1777
+ # line 1778 "vm.inc"
1760
1778
  # undef NAME_OF_CURRENT_INSN
1761
1779
 
1762
1780
  /* ### Instruction trailers. ### */
1763
1781
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1764
- CHECK_CANARY();
1782
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1765
1783
  INC_SP(INSN_ATTR(sp_inc));
1766
1784
  TOPN(0) = val;
1785
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1786
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1767
1787
  if (leaf) ADD_PC(INSN_ATTR(width));
1768
1788
  # undef INSN_ATTR
1769
1789
 
@@ -1816,7 +1836,7 @@ INSN_ENTRY(defined)
1816
1836
 
1817
1837
  /* ### Instruction preambles. ### */
1818
1838
  if (! leaf) ADD_PC(INSN_ATTR(width));
1819
- SETUP_CANARY();
1839
+ SETUP_CANARY(leaf);
1820
1840
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1821
1841
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, op_type);
1822
1842
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, obj);
@@ -1824,18 +1844,20 @@ INSN_ENTRY(defined)
1824
1844
 
1825
1845
  /* ### Here we do the instruction body. ### */
1826
1846
  # define NAME_OF_CURRENT_INSN defined
1827
- # line 681 "insns.def"
1847
+ # line 669 "insns.def"
1828
1848
  {
1829
1849
  val = vm_defined(ec, GET_CFP(), op_type, obj, needstr, v);
1830
1850
  }
1831
- # line 1832 "vm.inc"
1851
+ # line 1852 "vm.inc"
1832
1852
  # undef NAME_OF_CURRENT_INSN
1833
1853
 
1834
1854
  /* ### Instruction trailers. ### */
1835
1855
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1836
- CHECK_CANARY();
1856
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1837
1857
  INC_SP(INSN_ATTR(sp_inc));
1838
1858
  TOPN(0) = val;
1859
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1860
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1839
1861
  if (leaf) ADD_PC(INSN_ATTR(width));
1840
1862
  # undef INSN_ATTR
1841
1863
 
@@ -1860,24 +1882,26 @@ INSN_ENTRY(checkmatch)
1860
1882
 
1861
1883
  /* ### Instruction preambles. ### */
1862
1884
  if (! leaf) ADD_PC(INSN_ATTR(width));
1863
- SETUP_CANARY();
1885
+ SETUP_CANARY(leaf);
1864
1886
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1865
1887
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1866
1888
 
1867
1889
  /* ### Here we do the instruction body. ### */
1868
1890
  # define NAME_OF_CURRENT_INSN checkmatch
1869
- # line 698 "insns.def"
1891
+ # line 686 "insns.def"
1870
1892
  {
1871
1893
  result = vm_check_match(ec, target, pattern, flag);
1872
1894
  }
1873
- # line 1874 "vm.inc"
1895
+ # line 1896 "vm.inc"
1874
1896
  # undef NAME_OF_CURRENT_INSN
1875
1897
 
1876
1898
  /* ### Instruction trailers. ### */
1877
1899
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1878
- CHECK_CANARY();
1900
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1879
1901
  INC_SP(INSN_ATTR(sp_inc));
1880
1902
  TOPN(0) = result;
1903
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1904
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1881
1905
  if (leaf) ADD_PC(INSN_ATTR(width));
1882
1906
  # undef INSN_ATTR
1883
1907
 
@@ -1901,25 +1925,27 @@ INSN_ENTRY(checkkeyword)
1901
1925
 
1902
1926
  /* ### Instruction preambles. ### */
1903
1927
  if (! leaf) ADD_PC(INSN_ATTR(width));
1904
- SETUP_CANARY();
1928
+ SETUP_CANARY(leaf);
1905
1929
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1906
1930
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, kw_bits_index);
1907
1931
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, keyword_index);
1908
1932
 
1909
1933
  /* ### Here we do the instruction body. ### */
1910
1934
  # define NAME_OF_CURRENT_INSN checkkeyword
1911
- # line 708 "insns.def"
1935
+ # line 696 "insns.def"
1912
1936
  {
1913
1937
  ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP());
1914
1938
  }
1915
- # line 1916 "vm.inc"
1939
+ # line 1940 "vm.inc"
1916
1940
  # undef NAME_OF_CURRENT_INSN
1917
1941
 
1918
1942
  /* ### Instruction trailers. ### */
1919
1943
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1920
- CHECK_CANARY();
1944
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1921
1945
  INC_SP(INSN_ATTR(sp_inc));
1922
1946
  TOPN(0) = ret;
1947
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1948
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1923
1949
  if (leaf) ADD_PC(INSN_ATTR(width));
1924
1950
  # undef INSN_ATTR
1925
1951
 
@@ -1943,24 +1969,26 @@ INSN_ENTRY(checktype)
1943
1969
 
1944
1970
  /* ### Instruction preambles. ### */
1945
1971
  if (! leaf) ADD_PC(INSN_ATTR(width));
1946
- SETUP_CANARY();
1972
+ SETUP_CANARY(leaf);
1947
1973
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1948
1974
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, type);
1949
1975
 
1950
1976
  /* ### Here we do the instruction body. ### */
1951
1977
  # define NAME_OF_CURRENT_INSN checktype
1952
- # line 718 "insns.def"
1978
+ # line 706 "insns.def"
1953
1979
  {
1954
1980
  ret = (TYPE(val) == (int)type) ? Qtrue : Qfalse;
1955
1981
  }
1956
- # line 1957 "vm.inc"
1982
+ # line 1983 "vm.inc"
1957
1983
  # undef NAME_OF_CURRENT_INSN
1958
1984
 
1959
1985
  /* ### Instruction trailers. ### */
1960
1986
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1961
- CHECK_CANARY();
1987
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
1962
1988
  INC_SP(INSN_ATTR(sp_inc));
1963
1989
  TOPN(0) = ret;
1990
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1991
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1964
1992
  if (leaf) ADD_PC(INSN_ATTR(width));
1965
1993
  # undef INSN_ATTR
1966
1994
 
@@ -1988,7 +2016,7 @@ INSN_ENTRY(defineclass)
1988
2016
  /* ### Instruction preambles. ### */
1989
2017
  if (! leaf) ADD_PC(INSN_ATTR(width));
1990
2018
  POPN(INSN_ATTR(popn));
1991
- SETUP_CANARY();
2019
+ SETUP_CANARY(leaf);
1992
2020
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1993
2021
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
1994
2022
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, class_iseq);
@@ -1996,7 +2024,7 @@ INSN_ENTRY(defineclass)
1996
2024
 
1997
2025
  /* ### Here we do the instruction body. ### */
1998
2026
  # define NAME_OF_CURRENT_INSN defineclass
1999
- # line 734 "insns.def"
2027
+ # line 722 "insns.def"
2000
2028
  {
2001
2029
  VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super);
2002
2030
 
@@ -2004,20 +2032,20 @@ INSN_ENTRY(defineclass)
2004
2032
 
2005
2033
  /* enter scope */
2006
2034
  vm_push_frame(ec, class_iseq, VM_FRAME_MAGIC_CLASS | VM_ENV_FLAG_LOCAL, klass,
2007
- GET_BLOCK_HANDLER(),
2008
- (VALUE)vm_cref_push(ec, klass, NULL, FALSE),
2009
- class_iseq->body->iseq_encoded, GET_SP(),
2010
- class_iseq->body->local_table_size,
2011
- class_iseq->body->stack_max);
2035
+ GET_BLOCK_HANDLER(),
2036
+ (VALUE)vm_cref_push(ec, klass, NULL, FALSE),
2037
+ class_iseq->body->iseq_encoded, GET_SP(),
2038
+ class_iseq->body->local_table_size,
2039
+ class_iseq->body->stack_max);
2012
2040
  RESTORE_REGS();
2013
2041
  NEXT_INSN();
2014
2042
  }
2015
- # line 2016 "vm.inc"
2043
+ # line 2044 "vm.inc"
2016
2044
  # undef NAME_OF_CURRENT_INSN
2017
2045
 
2018
2046
  /* ### Instruction trailers. ### */
2019
2047
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2020
- CHECK_CANARY();
2048
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2021
2049
  PUSH(val);
2022
2050
  if (leaf) ADD_PC(INSN_ATTR(width));
2023
2051
  # undef INSN_ATTR
@@ -2042,23 +2070,23 @@ INSN_ENTRY(definemethod)
2042
2070
  /* ### Instruction preambles. ### */
2043
2071
  if (! leaf) ADD_PC(INSN_ATTR(width));
2044
2072
  POPN(INSN_ATTR(popn));
2045
- SETUP_CANARY();
2073
+ SETUP_CANARY(leaf);
2046
2074
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2047
2075
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
2048
2076
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, iseq);
2049
2077
 
2050
2078
  /* ### Here we do the instruction body. ### */
2051
2079
  # define NAME_OF_CURRENT_INSN definemethod
2052
- # line 755 "insns.def"
2080
+ # line 743 "insns.def"
2053
2081
  {
2054
2082
  vm_define_method(ec, Qnil, id, (VALUE)iseq, FALSE);
2055
2083
  }
2056
- # line 2057 "vm.inc"
2084
+ # line 2085 "vm.inc"
2057
2085
  # undef NAME_OF_CURRENT_INSN
2058
2086
 
2059
2087
  /* ### Instruction trailers. ### */
2060
2088
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2061
- CHECK_CANARY();
2089
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2062
2090
  if (leaf) ADD_PC(INSN_ATTR(width));
2063
2091
  # undef INSN_ATTR
2064
2092
 
@@ -2083,23 +2111,23 @@ INSN_ENTRY(definesmethod)
2083
2111
  /* ### Instruction preambles. ### */
2084
2112
  if (! leaf) ADD_PC(INSN_ATTR(width));
2085
2113
  POPN(INSN_ATTR(popn));
2086
- SETUP_CANARY();
2114
+ SETUP_CANARY(leaf);
2087
2115
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2088
2116
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
2089
2117
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, iseq);
2090
2118
 
2091
2119
  /* ### Here we do the instruction body. ### */
2092
2120
  # define NAME_OF_CURRENT_INSN definesmethod
2093
- # line 764 "insns.def"
2121
+ # line 752 "insns.def"
2094
2122
  {
2095
2123
  vm_define_method(ec, obj, id, (VALUE)iseq, TRUE);
2096
2124
  }
2097
- # line 2098 "vm.inc"
2125
+ # line 2126 "vm.inc"
2098
2126
  # undef NAME_OF_CURRENT_INSN
2099
2127
 
2100
2128
  /* ### Instruction trailers. ### */
2101
2129
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2102
- CHECK_CANARY();
2130
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2103
2131
  if (leaf) ADD_PC(INSN_ATTR(width));
2104
2132
  # undef INSN_ATTR
2105
2133
 
@@ -2124,29 +2152,29 @@ INSN_ENTRY(send)
2124
2152
  /* ### Instruction preambles. ### */
2125
2153
  if (! leaf) ADD_PC(INSN_ATTR(width));
2126
2154
  POPN(INSN_ATTR(popn));
2127
- SETUP_CANARY();
2155
+ SETUP_CANARY(leaf);
2128
2156
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2129
2157
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2130
2158
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, blockiseq);
2131
2159
 
2132
2160
  /* ### Here we do the instruction body. ### */
2133
2161
  # define NAME_OF_CURRENT_INSN send
2134
- # line 780 "insns.def"
2162
+ # line 768 "insns.def"
2135
2163
  {
2136
- VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), &cd->ci, blockiseq, false);
2137
- val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);
2164
+ VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false);
2165
+ val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
2138
2166
 
2139
2167
  if (val == Qundef) {
2140
2168
  RESTORE_REGS();
2141
2169
  NEXT_INSN();
2142
2170
  }
2143
2171
  }
2144
- # line 2145 "vm.inc"
2172
+ # line 2173 "vm.inc"
2145
2173
  # undef NAME_OF_CURRENT_INSN
2146
2174
 
2147
2175
  /* ### Instruction trailers. ### */
2148
2176
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2149
- CHECK_CANARY();
2177
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2150
2178
  PUSH(val);
2151
2179
  if (leaf) ADD_PC(INSN_ATTR(width));
2152
2180
  # undef INSN_ATTR
@@ -2171,28 +2199,28 @@ INSN_ENTRY(opt_send_without_block)
2171
2199
  /* ### Instruction preambles. ### */
2172
2200
  if (! leaf) ADD_PC(INSN_ATTR(width));
2173
2201
  POPN(INSN_ATTR(popn));
2174
- SETUP_CANARY();
2202
+ SETUP_CANARY(leaf);
2175
2203
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2176
2204
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2177
2205
 
2178
2206
  /* ### Here we do the instruction body. ### */
2179
2207
  # define NAME_OF_CURRENT_INSN opt_send_without_block
2180
- # line 799 "insns.def"
2208
+ # line 787 "insns.def"
2181
2209
  {
2182
2210
  VALUE bh = VM_BLOCK_HANDLER_NONE;
2183
- val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);
2211
+ val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
2184
2212
 
2185
2213
  if (val == Qundef) {
2186
2214
  RESTORE_REGS();
2187
2215
  NEXT_INSN();
2188
2216
  }
2189
2217
  }
2190
- # line 2191 "vm.inc"
2218
+ # line 2219 "vm.inc"
2191
2219
  # undef NAME_OF_CURRENT_INSN
2192
2220
 
2193
2221
  /* ### Instruction trailers. ### */
2194
2222
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2195
- CHECK_CANARY();
2223
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2196
2224
  PUSH(val);
2197
2225
  if (leaf) ADD_PC(INSN_ATTR(width));
2198
2226
  # undef INSN_ATTR
@@ -2217,14 +2245,14 @@ INSN_ENTRY(opt_str_freeze)
2217
2245
 
2218
2246
  /* ### Instruction preambles. ### */
2219
2247
  if (! leaf) ADD_PC(INSN_ATTR(width));
2220
- SETUP_CANARY();
2248
+ SETUP_CANARY(leaf);
2221
2249
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2222
2250
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
2223
2251
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
2224
2252
 
2225
2253
  /* ### Here we do the instruction body. ### */
2226
2254
  # define NAME_OF_CURRENT_INSN opt_str_freeze
2227
- # line 814 "insns.def"
2255
+ # line 802 "insns.def"
2228
2256
  {
2229
2257
  val = vm_opt_str_freeze(str, BOP_FREEZE, idFreeze);
2230
2258
 
@@ -2233,14 +2261,16 @@ INSN_ENTRY(opt_str_freeze)
2233
2261
  CALL_SIMPLE_METHOD();
2234
2262
  }
2235
2263
  }
2236
- # line 2237 "vm.inc"
2264
+ # line 2265 "vm.inc"
2237
2265
  # undef NAME_OF_CURRENT_INSN
2238
2266
 
2239
2267
  /* ### Instruction trailers. ### */
2240
2268
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2241
- CHECK_CANARY();
2269
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2242
2270
  INC_SP(INSN_ATTR(sp_inc));
2243
2271
  TOPN(0) = val;
2272
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2273
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2244
2274
  if (leaf) ADD_PC(INSN_ATTR(width));
2245
2275
  # undef INSN_ATTR
2246
2276
 
@@ -2264,28 +2294,30 @@ INSN_ENTRY(opt_nil_p)
2264
2294
 
2265
2295
  /* ### Instruction preambles. ### */
2266
2296
  if (! leaf) ADD_PC(INSN_ATTR(width));
2267
- SETUP_CANARY();
2297
+ SETUP_CANARY(leaf);
2268
2298
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2269
2299
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2270
2300
 
2271
2301
  /* ### Here we do the instruction body. ### */
2272
2302
  # define NAME_OF_CURRENT_INSN opt_nil_p
2273
- # line 829 "insns.def"
2303
+ # line 817 "insns.def"
2274
2304
  {
2275
- val = vm_opt_nil_p(cd, recv);
2305
+ val = vm_opt_nil_p(GET_ISEQ(), cd, recv);
2276
2306
 
2277
2307
  if (val == Qundef) {
2278
2308
  CALL_SIMPLE_METHOD();
2279
2309
  }
2280
2310
  }
2281
- # line 2282 "vm.inc"
2311
+ # line 2312 "vm.inc"
2282
2312
  # undef NAME_OF_CURRENT_INSN
2283
2313
 
2284
2314
  /* ### Instruction trailers. ### */
2285
2315
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2286
- CHECK_CANARY();
2316
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2287
2317
  INC_SP(INSN_ATTR(sp_inc));
2288
2318
  TOPN(0) = val;
2319
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2320
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2289
2321
  if (leaf) ADD_PC(INSN_ATTR(width));
2290
2322
  # undef INSN_ATTR
2291
2323
 
@@ -2309,14 +2341,14 @@ INSN_ENTRY(opt_str_uminus)
2309
2341
 
2310
2342
  /* ### Instruction preambles. ### */
2311
2343
  if (! leaf) ADD_PC(INSN_ATTR(width));
2312
- SETUP_CANARY();
2344
+ SETUP_CANARY(leaf);
2313
2345
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2314
2346
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
2315
2347
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
2316
2348
 
2317
2349
  /* ### Here we do the instruction body. ### */
2318
2350
  # define NAME_OF_CURRENT_INSN opt_str_uminus
2319
- # line 842 "insns.def"
2351
+ # line 830 "insns.def"
2320
2352
  {
2321
2353
  val = vm_opt_str_freeze(str, BOP_UMINUS, idUMinus);
2322
2354
 
@@ -2325,14 +2357,16 @@ INSN_ENTRY(opt_str_uminus)
2325
2357
  CALL_SIMPLE_METHOD();
2326
2358
  }
2327
2359
  }
2328
- # line 2329 "vm.inc"
2360
+ # line 2361 "vm.inc"
2329
2361
  # undef NAME_OF_CURRENT_INSN
2330
2362
 
2331
2363
  /* ### Instruction trailers. ### */
2332
2364
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2333
- CHECK_CANARY();
2365
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2334
2366
  INC_SP(INSN_ATTR(sp_inc));
2335
2367
  TOPN(0) = val;
2368
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2369
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2336
2370
  if (leaf) ADD_PC(INSN_ATTR(width));
2337
2371
  # undef INSN_ATTR
2338
2372
 
@@ -2355,24 +2389,26 @@ INSN_ENTRY(opt_newarray_max)
2355
2389
 
2356
2390
  /* ### Instruction preambles. ### */
2357
2391
  if (! leaf) ADD_PC(INSN_ATTR(width));
2358
- SETUP_CANARY();
2392
+ SETUP_CANARY(leaf);
2359
2393
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2360
2394
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
2361
2395
 
2362
2396
  /* ### Here we do the instruction body. ### */
2363
2397
  # define NAME_OF_CURRENT_INSN opt_newarray_max
2364
- # line 862 "insns.def"
2398
+ # line 850 "insns.def"
2365
2399
  {
2366
2400
  val = vm_opt_newarray_max(num, STACK_ADDR_FROM_TOP(num));
2367
2401
  }
2368
- # line 2369 "vm.inc"
2402
+ # line 2403 "vm.inc"
2369
2403
  # undef NAME_OF_CURRENT_INSN
2370
2404
 
2371
2405
  /* ### Instruction trailers. ### */
2372
2406
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2373
- CHECK_CANARY();
2407
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2374
2408
  INC_SP(INSN_ATTR(sp_inc));
2375
2409
  TOPN(0) = val;
2410
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2411
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2376
2412
  if (leaf) ADD_PC(INSN_ATTR(width));
2377
2413
  # undef INSN_ATTR
2378
2414
 
@@ -2395,24 +2431,26 @@ INSN_ENTRY(opt_newarray_min)
2395
2431
 
2396
2432
  /* ### Instruction preambles. ### */
2397
2433
  if (! leaf) ADD_PC(INSN_ATTR(width));
2398
- SETUP_CANARY();
2434
+ SETUP_CANARY(leaf);
2399
2435
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2400
2436
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
2401
2437
 
2402
2438
  /* ### Here we do the instruction body. ### */
2403
2439
  # define NAME_OF_CURRENT_INSN opt_newarray_min
2404
- # line 874 "insns.def"
2440
+ # line 862 "insns.def"
2405
2441
  {
2406
2442
  val = vm_opt_newarray_min(num, STACK_ADDR_FROM_TOP(num));
2407
2443
  }
2408
- # line 2409 "vm.inc"
2444
+ # line 2445 "vm.inc"
2409
2445
  # undef NAME_OF_CURRENT_INSN
2410
2446
 
2411
2447
  /* ### Instruction trailers. ### */
2412
2448
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2413
- CHECK_CANARY();
2449
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2414
2450
  INC_SP(INSN_ATTR(sp_inc));
2415
2451
  TOPN(0) = val;
2452
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2453
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2416
2454
  if (leaf) ADD_PC(INSN_ATTR(width));
2417
2455
  # undef INSN_ATTR
2418
2456
 
@@ -2437,29 +2475,29 @@ INSN_ENTRY(invokesuper)
2437
2475
  /* ### Instruction preambles. ### */
2438
2476
  if (! leaf) ADD_PC(INSN_ATTR(width));
2439
2477
  POPN(INSN_ATTR(popn));
2440
- SETUP_CANARY();
2478
+ SETUP_CANARY(leaf);
2441
2479
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2442
2480
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2443
2481
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, blockiseq);
2444
2482
 
2445
2483
  /* ### Here we do the instruction body. ### */
2446
2484
  # define NAME_OF_CURRENT_INSN invokesuper
2447
- # line 886 "insns.def"
2485
+ # line 874 "insns.def"
2448
2486
  {
2449
- VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), &cd->ci, blockiseq, true);
2450
- val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_super_method);
2487
+ VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true);
2488
+ val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super);
2451
2489
 
2452
2490
  if (val == Qundef) {
2453
2491
  RESTORE_REGS();
2454
2492
  NEXT_INSN();
2455
2493
  }
2456
2494
  }
2457
- # line 2458 "vm.inc"
2495
+ # line 2496 "vm.inc"
2458
2496
  # undef NAME_OF_CURRENT_INSN
2459
2497
 
2460
2498
  /* ### Instruction trailers. ### */
2461
2499
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2462
- CHECK_CANARY();
2500
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2463
2501
  PUSH(val);
2464
2502
  if (leaf) ADD_PC(INSN_ATTR(width));
2465
2503
  # undef INSN_ATTR
@@ -2484,32 +2522,28 @@ INSN_ENTRY(invokeblock)
2484
2522
  /* ### Instruction preambles. ### */
2485
2523
  if (! leaf) ADD_PC(INSN_ATTR(width));
2486
2524
  POPN(INSN_ATTR(popn));
2487
- SETUP_CANARY();
2525
+ SETUP_CANARY(leaf);
2488
2526
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2489
2527
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2490
2528
 
2491
2529
  /* ### Here we do the instruction body. ### */
2492
2530
  # define NAME_OF_CURRENT_INSN invokeblock
2493
- # line 905 "insns.def"
2531
+ # line 893 "insns.def"
2494
2532
  {
2495
- if (UNLIKELY(cd->cc.call != vm_invokeblock_i)) {
2496
- cd->cc.call = vm_invokeblock_i; // check before setting to avoid CoW
2497
- }
2498
-
2499
2533
  VALUE bh = VM_BLOCK_HANDLER_NONE;
2500
- val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_invokeblock);
2534
+ val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock);
2501
2535
 
2502
2536
  if (val == Qundef) {
2503
2537
  RESTORE_REGS();
2504
2538
  NEXT_INSN();
2505
2539
  }
2506
2540
  }
2507
- # line 2508 "vm.inc"
2541
+ # line 2542 "vm.inc"
2508
2542
  # undef NAME_OF_CURRENT_INSN
2509
2543
 
2510
2544
  /* ### Instruction trailers. ### */
2511
2545
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2512
- CHECK_CANARY();
2546
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2513
2547
  PUSH(val);
2514
2548
  if (leaf) ADD_PC(INSN_ATTR(width));
2515
2549
  # undef INSN_ATTR
@@ -2533,40 +2567,38 @@ INSN_ENTRY(leave)
2533
2567
  /* ### Instruction preambles. ### */
2534
2568
  if (! leaf) ADD_PC(INSN_ATTR(width));
2535
2569
  POPN(INSN_ATTR(popn));
2536
- SETUP_CANARY();
2570
+ SETUP_CANARY(leaf);
2537
2571
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2538
2572
 
2539
2573
  /* ### Here we do the instruction body. ### */
2540
2574
  # define NAME_OF_CURRENT_INSN leave
2541
- # line 930 "insns.def"
2575
+ # line 914 "insns.def"
2542
2576
  {
2543
2577
  if (OPT_CHECKED_RUN) {
2544
2578
  const VALUE *const bp = vm_base_ptr(GET_CFP());
2545
2579
  if (GET_SP() != bp) {
2546
2580
  vm_stack_consistency_error(ec, GET_CFP(), bp);
2547
- }
2581
+ }
2548
2582
  }
2549
2583
 
2550
- RUBY_VM_CHECK_INTS(ec);
2551
-
2552
2584
  if (vm_pop_frame(ec, GET_CFP(), GET_EP())) {
2553
2585
  # if OPT_CALL_THREADED_CODE
2554
- rb_ec_thread_ptr(ec)->retval = val;
2555
- return 0;
2586
+ rb_ec_thread_ptr(ec)->retval = val;
2587
+ return 0;
2556
2588
  # else
2557
- return val;
2589
+ return val;
2558
2590
  # endif
2559
2591
  }
2560
2592
  else {
2561
- RESTORE_REGS();
2593
+ RESTORE_REGS();
2562
2594
  }
2563
2595
  }
2564
- # line 2565 "vm.inc"
2596
+ # line 2597 "vm.inc"
2565
2597
  # undef NAME_OF_CURRENT_INSN
2566
2598
 
2567
2599
  /* ### Instruction trailers. ### */
2568
2600
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2569
- CHECK_CANARY();
2601
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2570
2602
  PUSH(val);
2571
2603
  if (leaf) ADD_PC(INSN_ATTR(width));
2572
2604
  # undef INSN_ATTR
@@ -2591,27 +2623,28 @@ INSN_ENTRY(throw)
2591
2623
 
2592
2624
  /* ### Instruction preambles. ### */
2593
2625
  if (! leaf) ADD_PC(INSN_ATTR(width));
2594
- SETUP_CANARY();
2626
+ SETUP_CANARY(leaf);
2595
2627
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2596
2628
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, throw_state);
2597
2629
 
2598
2630
  /* ### Here we do the instruction body. ### */
2599
2631
  # define NAME_OF_CURRENT_INSN throw
2600
- # line 965 "insns.def"
2632
+ # line 947 "insns.def"
2601
2633
  {
2602
- RUBY_VM_CHECK_INTS(ec);
2603
2634
  val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
2604
2635
  THROW_EXCEPTION(val);
2605
2636
  /* unreachable */
2606
2637
  }
2607
- # line 2608 "vm.inc"
2638
+ # line 2639 "vm.inc"
2608
2639
  # undef NAME_OF_CURRENT_INSN
2609
2640
 
2610
2641
  /* ### Instruction trailers. ### */
2611
2642
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2612
- CHECK_CANARY();
2643
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2613
2644
  INC_SP(INSN_ATTR(sp_inc));
2614
2645
  TOPN(0) = val;
2646
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2647
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2615
2648
  if (leaf) ADD_PC(INSN_ATTR(width));
2616
2649
  # undef INSN_ATTR
2617
2650
 
@@ -2633,23 +2666,23 @@ INSN_ENTRY(jump)
2633
2666
 
2634
2667
  /* ### Instruction preambles. ### */
2635
2668
  if (! leaf) ADD_PC(INSN_ATTR(width));
2636
- SETUP_CANARY();
2669
+ SETUP_CANARY(leaf);
2637
2670
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2638
2671
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2639
2672
 
2640
2673
  /* ### Here we do the instruction body. ### */
2641
2674
  # define NAME_OF_CURRENT_INSN jump
2642
- # line 984 "insns.def"
2675
+ # line 965 "insns.def"
2643
2676
  {
2644
2677
  RUBY_VM_CHECK_INTS(ec);
2645
2678
  JUMP(dst);
2646
2679
  }
2647
- # line 2648 "vm.inc"
2680
+ # line 2681 "vm.inc"
2648
2681
  # undef NAME_OF_CURRENT_INSN
2649
2682
 
2650
2683
  /* ### Instruction trailers. ### */
2651
2684
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2652
- CHECK_CANARY();
2685
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2653
2686
  INC_SP(INSN_ATTR(sp_inc));
2654
2687
  if (leaf) ADD_PC(INSN_ATTR(width));
2655
2688
  # undef INSN_ATTR
@@ -2673,25 +2706,25 @@ INSN_ENTRY(branchif)
2673
2706
 
2674
2707
  /* ### Instruction preambles. ### */
2675
2708
  if (! leaf) ADD_PC(INSN_ATTR(width));
2676
- SETUP_CANARY();
2709
+ SETUP_CANARY(leaf);
2677
2710
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2678
2711
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2679
2712
 
2680
2713
  /* ### Here we do the instruction body. ### */
2681
2714
  # define NAME_OF_CURRENT_INSN branchif
2682
- # line 997 "insns.def"
2715
+ # line 978 "insns.def"
2683
2716
  {
2684
2717
  if (RTEST(val)) {
2685
- RUBY_VM_CHECK_INTS(ec);
2686
- JUMP(dst);
2718
+ RUBY_VM_CHECK_INTS(ec);
2719
+ JUMP(dst);
2687
2720
  }
2688
2721
  }
2689
- # line 2690 "vm.inc"
2722
+ # line 2723 "vm.inc"
2690
2723
  # undef NAME_OF_CURRENT_INSN
2691
2724
 
2692
2725
  /* ### Instruction trailers. ### */
2693
2726
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2694
- CHECK_CANARY();
2727
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2695
2728
  INC_SP(INSN_ATTR(sp_inc));
2696
2729
  if (leaf) ADD_PC(INSN_ATTR(width));
2697
2730
  # undef INSN_ATTR
@@ -2715,25 +2748,25 @@ INSN_ENTRY(branchunless)
2715
2748
 
2716
2749
  /* ### Instruction preambles. ### */
2717
2750
  if (! leaf) ADD_PC(INSN_ATTR(width));
2718
- SETUP_CANARY();
2751
+ SETUP_CANARY(leaf);
2719
2752
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2720
2753
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2721
2754
 
2722
2755
  /* ### Here we do the instruction body. ### */
2723
2756
  # define NAME_OF_CURRENT_INSN branchunless
2724
- # line 1012 "insns.def"
2757
+ # line 993 "insns.def"
2725
2758
  {
2726
2759
  if (!RTEST(val)) {
2727
- RUBY_VM_CHECK_INTS(ec);
2728
- JUMP(dst);
2760
+ RUBY_VM_CHECK_INTS(ec);
2761
+ JUMP(dst);
2729
2762
  }
2730
2763
  }
2731
- # line 2732 "vm.inc"
2764
+ # line 2765 "vm.inc"
2732
2765
  # undef NAME_OF_CURRENT_INSN
2733
2766
 
2734
2767
  /* ### Instruction trailers. ### */
2735
2768
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2736
- CHECK_CANARY();
2769
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2737
2770
  INC_SP(INSN_ATTR(sp_inc));
2738
2771
  if (leaf) ADD_PC(INSN_ATTR(width));
2739
2772
  # undef INSN_ATTR
@@ -2757,25 +2790,25 @@ INSN_ENTRY(branchnil)
2757
2790
 
2758
2791
  /* ### Instruction preambles. ### */
2759
2792
  if (! leaf) ADD_PC(INSN_ATTR(width));
2760
- SETUP_CANARY();
2793
+ SETUP_CANARY(leaf);
2761
2794
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2762
2795
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2763
2796
 
2764
2797
  /* ### Here we do the instruction body. ### */
2765
2798
  # define NAME_OF_CURRENT_INSN branchnil
2766
- # line 1027 "insns.def"
2799
+ # line 1008 "insns.def"
2767
2800
  {
2768
2801
  if (NIL_P(val)) {
2769
- RUBY_VM_CHECK_INTS(ec);
2770
- JUMP(dst);
2802
+ RUBY_VM_CHECK_INTS(ec);
2803
+ JUMP(dst);
2771
2804
  }
2772
2805
  }
2773
- # line 2774 "vm.inc"
2806
+ # line 2807 "vm.inc"
2774
2807
  # undef NAME_OF_CURRENT_INSN
2775
2808
 
2776
2809
  /* ### Instruction trailers. ### */
2777
2810
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2778
- CHECK_CANARY();
2811
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2779
2812
  INC_SP(INSN_ATTR(sp_inc));
2780
2813
  if (leaf) ADD_PC(INSN_ATTR(width));
2781
2814
  # undef INSN_ATTR
@@ -2800,31 +2833,33 @@ INSN_ENTRY(opt_getinlinecache)
2800
2833
 
2801
2834
  /* ### Instruction preambles. ### */
2802
2835
  if (! leaf) ADD_PC(INSN_ATTR(width));
2803
- SETUP_CANARY();
2836
+ SETUP_CANARY(leaf);
2804
2837
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2805
2838
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2806
2839
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ic);
2807
2840
 
2808
2841
  /* ### Here we do the instruction body. ### */
2809
2842
  # define NAME_OF_CURRENT_INSN opt_getinlinecache
2810
- # line 1044 "insns.def"
2843
+ # line 1025 "insns.def"
2811
2844
  {
2812
- if (vm_ic_hit_p(ic, GET_EP())) {
2813
- val = ic->ic_value.value;
2814
- JUMP(dst);
2845
+ if (vm_ic_hit_p(ic->ic_serial, ic->ic_cref, GET_EP())) {
2846
+ val = ic->value;
2847
+ JUMP(dst);
2815
2848
  }
2816
2849
  else {
2817
- val = Qnil;
2850
+ val = Qnil;
2818
2851
  }
2819
2852
  }
2820
- # line 2821 "vm.inc"
2853
+ # line 2854 "vm.inc"
2821
2854
  # undef NAME_OF_CURRENT_INSN
2822
2855
 
2823
2856
  /* ### Instruction trailers. ### */
2824
2857
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2825
- CHECK_CANARY();
2858
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2826
2859
  INC_SP(INSN_ATTR(sp_inc));
2827
2860
  TOPN(0) = val;
2861
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2862
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2828
2863
  if (leaf) ADD_PC(INSN_ATTR(width));
2829
2864
  # undef INSN_ATTR
2830
2865
 
@@ -2847,24 +2882,26 @@ INSN_ENTRY(opt_setinlinecache)
2847
2882
 
2848
2883
  /* ### Instruction preambles. ### */
2849
2884
  if (! leaf) ADD_PC(INSN_ATTR(width));
2850
- SETUP_CANARY();
2885
+ SETUP_CANARY(leaf);
2851
2886
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2852
2887
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ic);
2853
2888
 
2854
2889
  /* ### Here we do the instruction body. ### */
2855
2890
  # define NAME_OF_CURRENT_INSN opt_setinlinecache
2856
- # line 1060 "insns.def"
2891
+ # line 1041 "insns.def"
2857
2892
  {
2858
2893
  vm_ic_update(ic, val, GET_EP());
2859
2894
  }
2860
- # line 2861 "vm.inc"
2895
+ # line 2896 "vm.inc"
2861
2896
  # undef NAME_OF_CURRENT_INSN
2862
2897
 
2863
2898
  /* ### Instruction trailers. ### */
2864
2899
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2865
- CHECK_CANARY();
2900
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2866
2901
  INC_SP(INSN_ATTR(sp_inc));
2867
2902
  TOPN(0) = val;
2903
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2904
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2868
2905
  if (leaf) ADD_PC(INSN_ATTR(width));
2869
2906
  # undef INSN_ATTR
2870
2907
 
@@ -2889,23 +2926,23 @@ INSN_ENTRY(once)
2889
2926
  /* ### Instruction preambles. ### */
2890
2927
  if (! leaf) ADD_PC(INSN_ATTR(width));
2891
2928
  POPN(INSN_ATTR(popn));
2892
- SETUP_CANARY();
2929
+ SETUP_CANARY(leaf);
2893
2930
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2894
2931
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, iseq);
2895
2932
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ise);
2896
2933
 
2897
2934
  /* ### Here we do the instruction body. ### */
2898
2935
  # define NAME_OF_CURRENT_INSN once
2899
- # line 1070 "insns.def"
2936
+ # line 1051 "insns.def"
2900
2937
  {
2901
2938
  val = vm_once_dispatch(ec, iseq, ise);
2902
2939
  }
2903
- # line 2904 "vm.inc"
2940
+ # line 2941 "vm.inc"
2904
2941
  # undef NAME_OF_CURRENT_INSN
2905
2942
 
2906
2943
  /* ### Instruction trailers. ### */
2907
2944
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2908
- CHECK_CANARY();
2945
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2909
2946
  PUSH(val);
2910
2947
  if (leaf) ADD_PC(INSN_ATTR(width));
2911
2948
  # undef INSN_ATTR
@@ -2930,27 +2967,27 @@ INSN_ENTRY(opt_case_dispatch)
2930
2967
 
2931
2968
  /* ### Instruction preambles. ### */
2932
2969
  if (! leaf) ADD_PC(INSN_ATTR(width));
2933
- SETUP_CANARY();
2970
+ SETUP_CANARY(leaf);
2934
2971
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2935
2972
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
2936
2973
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, else_offset);
2937
2974
 
2938
2975
  /* ### Here we do the instruction body. ### */
2939
2976
  # define NAME_OF_CURRENT_INSN opt_case_dispatch
2940
- # line 1081 "insns.def"
2977
+ # line 1062 "insns.def"
2941
2978
  {
2942
2979
  OFFSET dst = vm_case_dispatch(hash, else_offset, key);
2943
2980
 
2944
2981
  if (dst) {
2945
- JUMP(dst);
2982
+ JUMP(dst);
2946
2983
  }
2947
2984
  }
2948
- # line 2949 "vm.inc"
2985
+ # line 2986 "vm.inc"
2949
2986
  # undef NAME_OF_CURRENT_INSN
2950
2987
 
2951
2988
  /* ### Instruction trailers. ### */
2952
2989
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2953
- CHECK_CANARY();
2990
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2954
2991
  INC_SP(INSN_ATTR(sp_inc));
2955
2992
  if (leaf) ADD_PC(INSN_ATTR(width));
2956
2993
  # undef INSN_ATTR
@@ -2976,13 +3013,13 @@ INSN_ENTRY(opt_plus)
2976
3013
 
2977
3014
  /* ### Instruction preambles. ### */
2978
3015
  if (! leaf) ADD_PC(INSN_ATTR(width));
2979
- SETUP_CANARY();
3016
+ SETUP_CANARY(leaf);
2980
3017
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2981
3018
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2982
3019
 
2983
3020
  /* ### Here we do the instruction body. ### */
2984
3021
  # define NAME_OF_CURRENT_INSN opt_plus
2985
- # line 1097 "insns.def"
3022
+ # line 1078 "insns.def"
2986
3023
  {
2987
3024
  val = vm_opt_plus(recv, obj);
2988
3025
 
@@ -2990,14 +3027,16 @@ INSN_ENTRY(opt_plus)
2990
3027
  CALL_SIMPLE_METHOD();
2991
3028
  }
2992
3029
  }
2993
- # line 2994 "vm.inc"
3030
+ # line 3031 "vm.inc"
2994
3031
  # undef NAME_OF_CURRENT_INSN
2995
3032
 
2996
3033
  /* ### Instruction trailers. ### */
2997
3034
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2998
- CHECK_CANARY();
3035
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
2999
3036
  INC_SP(INSN_ATTR(sp_inc));
3000
3037
  TOPN(0) = val;
3038
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3039
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3001
3040
  if (leaf) ADD_PC(INSN_ATTR(width));
3002
3041
  # undef INSN_ATTR
3003
3042
 
@@ -3022,13 +3061,13 @@ INSN_ENTRY(opt_minus)
3022
3061
 
3023
3062
  /* ### Instruction preambles. ### */
3024
3063
  if (! leaf) ADD_PC(INSN_ATTR(width));
3025
- SETUP_CANARY();
3064
+ SETUP_CANARY(leaf);
3026
3065
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3027
3066
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3028
3067
 
3029
3068
  /* ### Here we do the instruction body. ### */
3030
3069
  # define NAME_OF_CURRENT_INSN opt_minus
3031
- # line 1111 "insns.def"
3070
+ # line 1092 "insns.def"
3032
3071
  {
3033
3072
  val = vm_opt_minus(recv, obj);
3034
3073
 
@@ -3036,14 +3075,16 @@ INSN_ENTRY(opt_minus)
3036
3075
  CALL_SIMPLE_METHOD();
3037
3076
  }
3038
3077
  }
3039
- # line 3040 "vm.inc"
3078
+ # line 3079 "vm.inc"
3040
3079
  # undef NAME_OF_CURRENT_INSN
3041
3080
 
3042
3081
  /* ### Instruction trailers. ### */
3043
3082
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3044
- CHECK_CANARY();
3083
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3045
3084
  INC_SP(INSN_ATTR(sp_inc));
3046
3085
  TOPN(0) = val;
3086
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3087
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3047
3088
  if (leaf) ADD_PC(INSN_ATTR(width));
3048
3089
  # undef INSN_ATTR
3049
3090
 
@@ -3068,13 +3109,13 @@ INSN_ENTRY(opt_mult)
3068
3109
 
3069
3110
  /* ### Instruction preambles. ### */
3070
3111
  if (! leaf) ADD_PC(INSN_ATTR(width));
3071
- SETUP_CANARY();
3112
+ SETUP_CANARY(leaf);
3072
3113
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3073
3114
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3074
3115
 
3075
3116
  /* ### Here we do the instruction body. ### */
3076
3117
  # define NAME_OF_CURRENT_INSN opt_mult
3077
- # line 1125 "insns.def"
3118
+ # line 1106 "insns.def"
3078
3119
  {
3079
3120
  val = vm_opt_mult(recv, obj);
3080
3121
 
@@ -3082,14 +3123,16 @@ INSN_ENTRY(opt_mult)
3082
3123
  CALL_SIMPLE_METHOD();
3083
3124
  }
3084
3125
  }
3085
- # line 3086 "vm.inc"
3126
+ # line 3127 "vm.inc"
3086
3127
  # undef NAME_OF_CURRENT_INSN
3087
3128
 
3088
3129
  /* ### Instruction trailers. ### */
3089
3130
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3090
- CHECK_CANARY();
3131
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3091
3132
  INC_SP(INSN_ATTR(sp_inc));
3092
3133
  TOPN(0) = val;
3134
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3135
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3093
3136
  if (leaf) ADD_PC(INSN_ATTR(width));
3094
3137
  # undef INSN_ATTR
3095
3138
 
@@ -3114,13 +3157,13 @@ INSN_ENTRY(opt_div)
3114
3157
 
3115
3158
  /* ### Instruction preambles. ### */
3116
3159
  if (! leaf) ADD_PC(INSN_ATTR(width));
3117
- SETUP_CANARY();
3160
+ SETUP_CANARY(leaf);
3118
3161
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3119
3162
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3120
3163
 
3121
3164
  /* ### Here we do the instruction body. ### */
3122
3165
  # define NAME_OF_CURRENT_INSN opt_div
3123
- # line 1142 "insns.def"
3166
+ # line 1123 "insns.def"
3124
3167
  {
3125
3168
  val = vm_opt_div(recv, obj);
3126
3169
 
@@ -3128,14 +3171,16 @@ INSN_ENTRY(opt_div)
3128
3171
  CALL_SIMPLE_METHOD();
3129
3172
  }
3130
3173
  }
3131
- # line 3132 "vm.inc"
3174
+ # line 3175 "vm.inc"
3132
3175
  # undef NAME_OF_CURRENT_INSN
3133
3176
 
3134
3177
  /* ### Instruction trailers. ### */
3135
3178
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3136
- CHECK_CANARY();
3179
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3137
3180
  INC_SP(INSN_ATTR(sp_inc));
3138
3181
  TOPN(0) = val;
3182
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3183
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3139
3184
  if (leaf) ADD_PC(INSN_ATTR(width));
3140
3185
  # undef INSN_ATTR
3141
3186
 
@@ -3160,13 +3205,13 @@ INSN_ENTRY(opt_mod)
3160
3205
 
3161
3206
  /* ### Instruction preambles. ### */
3162
3207
  if (! leaf) ADD_PC(INSN_ATTR(width));
3163
- SETUP_CANARY();
3208
+ SETUP_CANARY(leaf);
3164
3209
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3165
3210
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3166
3211
 
3167
3212
  /* ### Here we do the instruction body. ### */
3168
3213
  # define NAME_OF_CURRENT_INSN opt_mod
3169
- # line 1158 "insns.def"
3214
+ # line 1139 "insns.def"
3170
3215
  {
3171
3216
  val = vm_opt_mod(recv, obj);
3172
3217
 
@@ -3174,14 +3219,16 @@ INSN_ENTRY(opt_mod)
3174
3219
  CALL_SIMPLE_METHOD();
3175
3220
  }
3176
3221
  }
3177
- # line 3178 "vm.inc"
3222
+ # line 3223 "vm.inc"
3178
3223
  # undef NAME_OF_CURRENT_INSN
3179
3224
 
3180
3225
  /* ### Instruction trailers. ### */
3181
3226
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3182
- CHECK_CANARY();
3227
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3183
3228
  INC_SP(INSN_ATTR(sp_inc));
3184
3229
  TOPN(0) = val;
3230
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3231
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3185
3232
  if (leaf) ADD_PC(INSN_ATTR(width));
3186
3233
  # undef INSN_ATTR
3187
3234
 
@@ -3206,28 +3253,30 @@ INSN_ENTRY(opt_eq)
3206
3253
 
3207
3254
  /* ### Instruction preambles. ### */
3208
3255
  if (! leaf) ADD_PC(INSN_ATTR(width));
3209
- SETUP_CANARY();
3256
+ SETUP_CANARY(leaf);
3210
3257
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3211
3258
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3212
3259
 
3213
3260
  /* ### Here we do the instruction body. ### */
3214
3261
  # define NAME_OF_CURRENT_INSN opt_eq
3215
- # line 1172 "insns.def"
3262
+ # line 1153 "insns.def"
3216
3263
  {
3217
- val = opt_eq_func(recv, obj, cd);
3264
+ val = opt_equality(GET_ISEQ(), recv, obj, cd);
3218
3265
 
3219
3266
  if (val == Qundef) {
3220
3267
  CALL_SIMPLE_METHOD();
3221
3268
  }
3222
3269
  }
3223
- # line 3224 "vm.inc"
3270
+ # line 3271 "vm.inc"
3224
3271
  # undef NAME_OF_CURRENT_INSN
3225
3272
 
3226
3273
  /* ### Instruction trailers. ### */
3227
3274
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3228
- CHECK_CANARY();
3275
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3229
3276
  INC_SP(INSN_ATTR(sp_inc));
3230
3277
  TOPN(0) = val;
3278
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3279
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3231
3280
  if (leaf) ADD_PC(INSN_ATTR(width));
3232
3281
  # undef INSN_ATTR
3233
3282
 
@@ -3253,29 +3302,31 @@ INSN_ENTRY(opt_neq)
3253
3302
 
3254
3303
  /* ### Instruction preambles. ### */
3255
3304
  if (! leaf) ADD_PC(INSN_ATTR(width));
3256
- SETUP_CANARY();
3305
+ SETUP_CANARY(leaf);
3257
3306
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3258
3307
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd_eq);
3259
3308
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
3260
3309
 
3261
3310
  /* ### Here we do the instruction body. ### */
3262
3311
  # define NAME_OF_CURRENT_INSN opt_neq
3263
- # line 1186 "insns.def"
3312
+ # line 1167 "insns.def"
3264
3313
  {
3265
- val = vm_opt_neq(cd, cd_eq, recv, obj);
3314
+ val = vm_opt_neq(GET_ISEQ(), cd, cd_eq, recv, obj);
3266
3315
 
3267
3316
  if (val == Qundef) {
3268
3317
  CALL_SIMPLE_METHOD();
3269
3318
  }
3270
3319
  }
3271
- # line 3272 "vm.inc"
3320
+ # line 3321 "vm.inc"
3272
3321
  # undef NAME_OF_CURRENT_INSN
3273
3322
 
3274
3323
  /* ### Instruction trailers. ### */
3275
3324
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3276
- CHECK_CANARY();
3325
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3277
3326
  INC_SP(INSN_ATTR(sp_inc));
3278
3327
  TOPN(0) = val;
3328
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3329
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3279
3330
  if (leaf) ADD_PC(INSN_ATTR(width));
3280
3331
  # undef INSN_ATTR
3281
3332
 
@@ -3300,13 +3351,13 @@ INSN_ENTRY(opt_lt)
3300
3351
 
3301
3352
  /* ### Instruction preambles. ### */
3302
3353
  if (! leaf) ADD_PC(INSN_ATTR(width));
3303
- SETUP_CANARY();
3354
+ SETUP_CANARY(leaf);
3304
3355
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3305
3356
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3306
3357
 
3307
3358
  /* ### Here we do the instruction body. ### */
3308
3359
  # define NAME_OF_CURRENT_INSN opt_lt
3309
- # line 1200 "insns.def"
3360
+ # line 1181 "insns.def"
3310
3361
  {
3311
3362
  val = vm_opt_lt(recv, obj);
3312
3363
 
@@ -3314,14 +3365,16 @@ INSN_ENTRY(opt_lt)
3314
3365
  CALL_SIMPLE_METHOD();
3315
3366
  }
3316
3367
  }
3317
- # line 3318 "vm.inc"
3368
+ # line 3369 "vm.inc"
3318
3369
  # undef NAME_OF_CURRENT_INSN
3319
3370
 
3320
3371
  /* ### Instruction trailers. ### */
3321
3372
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3322
- CHECK_CANARY();
3373
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3323
3374
  INC_SP(INSN_ATTR(sp_inc));
3324
3375
  TOPN(0) = val;
3376
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3377
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3325
3378
  if (leaf) ADD_PC(INSN_ATTR(width));
3326
3379
  # undef INSN_ATTR
3327
3380
 
@@ -3346,13 +3399,13 @@ INSN_ENTRY(opt_le)
3346
3399
 
3347
3400
  /* ### Instruction preambles. ### */
3348
3401
  if (! leaf) ADD_PC(INSN_ATTR(width));
3349
- SETUP_CANARY();
3402
+ SETUP_CANARY(leaf);
3350
3403
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3351
3404
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3352
3405
 
3353
3406
  /* ### Here we do the instruction body. ### */
3354
3407
  # define NAME_OF_CURRENT_INSN opt_le
3355
- # line 1214 "insns.def"
3408
+ # line 1195 "insns.def"
3356
3409
  {
3357
3410
  val = vm_opt_le(recv, obj);
3358
3411
 
@@ -3360,14 +3413,16 @@ INSN_ENTRY(opt_le)
3360
3413
  CALL_SIMPLE_METHOD();
3361
3414
  }
3362
3415
  }
3363
- # line 3364 "vm.inc"
3416
+ # line 3417 "vm.inc"
3364
3417
  # undef NAME_OF_CURRENT_INSN
3365
3418
 
3366
3419
  /* ### Instruction trailers. ### */
3367
3420
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3368
- CHECK_CANARY();
3421
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3369
3422
  INC_SP(INSN_ATTR(sp_inc));
3370
3423
  TOPN(0) = val;
3424
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3425
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3371
3426
  if (leaf) ADD_PC(INSN_ATTR(width));
3372
3427
  # undef INSN_ATTR
3373
3428
 
@@ -3392,13 +3447,13 @@ INSN_ENTRY(opt_gt)
3392
3447
 
3393
3448
  /* ### Instruction preambles. ### */
3394
3449
  if (! leaf) ADD_PC(INSN_ATTR(width));
3395
- SETUP_CANARY();
3450
+ SETUP_CANARY(leaf);
3396
3451
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3397
3452
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3398
3453
 
3399
3454
  /* ### Here we do the instruction body. ### */
3400
3455
  # define NAME_OF_CURRENT_INSN opt_gt
3401
- # line 1228 "insns.def"
3456
+ # line 1209 "insns.def"
3402
3457
  {
3403
3458
  val = vm_opt_gt(recv, obj);
3404
3459
 
@@ -3406,14 +3461,16 @@ INSN_ENTRY(opt_gt)
3406
3461
  CALL_SIMPLE_METHOD();
3407
3462
  }
3408
3463
  }
3409
- # line 3410 "vm.inc"
3464
+ # line 3465 "vm.inc"
3410
3465
  # undef NAME_OF_CURRENT_INSN
3411
3466
 
3412
3467
  /* ### Instruction trailers. ### */
3413
3468
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3414
- CHECK_CANARY();
3469
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3415
3470
  INC_SP(INSN_ATTR(sp_inc));
3416
3471
  TOPN(0) = val;
3472
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3473
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3417
3474
  if (leaf) ADD_PC(INSN_ATTR(width));
3418
3475
  # undef INSN_ATTR
3419
3476
 
@@ -3438,13 +3495,13 @@ INSN_ENTRY(opt_ge)
3438
3495
 
3439
3496
  /* ### Instruction preambles. ### */
3440
3497
  if (! leaf) ADD_PC(INSN_ATTR(width));
3441
- SETUP_CANARY();
3498
+ SETUP_CANARY(leaf);
3442
3499
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3443
3500
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3444
3501
 
3445
3502
  /* ### Here we do the instruction body. ### */
3446
3503
  # define NAME_OF_CURRENT_INSN opt_ge
3447
- # line 1242 "insns.def"
3504
+ # line 1223 "insns.def"
3448
3505
  {
3449
3506
  val = vm_opt_ge(recv, obj);
3450
3507
 
@@ -3452,14 +3509,16 @@ INSN_ENTRY(opt_ge)
3452
3509
  CALL_SIMPLE_METHOD();
3453
3510
  }
3454
3511
  }
3455
- # line 3456 "vm.inc"
3512
+ # line 3513 "vm.inc"
3456
3513
  # undef NAME_OF_CURRENT_INSN
3457
3514
 
3458
3515
  /* ### Instruction trailers. ### */
3459
3516
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3460
- CHECK_CANARY();
3517
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3461
3518
  INC_SP(INSN_ATTR(sp_inc));
3462
3519
  TOPN(0) = val;
3520
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3521
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3463
3522
  if (leaf) ADD_PC(INSN_ATTR(width));
3464
3523
  # undef INSN_ATTR
3465
3524
 
@@ -3484,13 +3543,13 @@ INSN_ENTRY(opt_ltlt)
3484
3543
 
3485
3544
  /* ### Instruction preambles. ### */
3486
3545
  if (! leaf) ADD_PC(INSN_ATTR(width));
3487
- SETUP_CANARY();
3546
+ SETUP_CANARY(leaf);
3488
3547
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3489
3548
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3490
3549
 
3491
3550
  /* ### Here we do the instruction body. ### */
3492
3551
  # define NAME_OF_CURRENT_INSN opt_ltlt
3493
- # line 1260 "insns.def"
3552
+ # line 1241 "insns.def"
3494
3553
  {
3495
3554
  val = vm_opt_ltlt(recv, obj);
3496
3555
 
@@ -3498,14 +3557,16 @@ INSN_ENTRY(opt_ltlt)
3498
3557
  CALL_SIMPLE_METHOD();
3499
3558
  }
3500
3559
  }
3501
- # line 3502 "vm.inc"
3560
+ # line 3561 "vm.inc"
3502
3561
  # undef NAME_OF_CURRENT_INSN
3503
3562
 
3504
3563
  /* ### Instruction trailers. ### */
3505
3564
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3506
- CHECK_CANARY();
3565
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3507
3566
  INC_SP(INSN_ATTR(sp_inc));
3508
3567
  TOPN(0) = val;
3568
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3569
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3509
3570
  if (leaf) ADD_PC(INSN_ATTR(width));
3510
3571
  # undef INSN_ATTR
3511
3572
 
@@ -3530,13 +3591,13 @@ INSN_ENTRY(opt_and)
3530
3591
 
3531
3592
  /* ### Instruction preambles. ### */
3532
3593
  if (! leaf) ADD_PC(INSN_ATTR(width));
3533
- SETUP_CANARY();
3594
+ SETUP_CANARY(leaf);
3534
3595
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3535
3596
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3536
3597
 
3537
3598
  /* ### Here we do the instruction body. ### */
3538
3599
  # define NAME_OF_CURRENT_INSN opt_and
3539
- # line 1274 "insns.def"
3600
+ # line 1255 "insns.def"
3540
3601
  {
3541
3602
  val = vm_opt_and(recv, obj);
3542
3603
 
@@ -3544,14 +3605,16 @@ INSN_ENTRY(opt_and)
3544
3605
  CALL_SIMPLE_METHOD();
3545
3606
  }
3546
3607
  }
3547
- # line 3548 "vm.inc"
3608
+ # line 3609 "vm.inc"
3548
3609
  # undef NAME_OF_CURRENT_INSN
3549
3610
 
3550
3611
  /* ### Instruction trailers. ### */
3551
3612
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3552
- CHECK_CANARY();
3613
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3553
3614
  INC_SP(INSN_ATTR(sp_inc));
3554
3615
  TOPN(0) = val;
3616
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3617
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3555
3618
  if (leaf) ADD_PC(INSN_ATTR(width));
3556
3619
  # undef INSN_ATTR
3557
3620
 
@@ -3576,13 +3639,13 @@ INSN_ENTRY(opt_or)
3576
3639
 
3577
3640
  /* ### Instruction preambles. ### */
3578
3641
  if (! leaf) ADD_PC(INSN_ATTR(width));
3579
- SETUP_CANARY();
3642
+ SETUP_CANARY(leaf);
3580
3643
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3581
3644
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3582
3645
 
3583
3646
  /* ### Here we do the instruction body. ### */
3584
3647
  # define NAME_OF_CURRENT_INSN opt_or
3585
- # line 1288 "insns.def"
3648
+ # line 1269 "insns.def"
3586
3649
  {
3587
3650
  val = vm_opt_or(recv, obj);
3588
3651
 
@@ -3590,14 +3653,16 @@ INSN_ENTRY(opt_or)
3590
3653
  CALL_SIMPLE_METHOD();
3591
3654
  }
3592
3655
  }
3593
- # line 3594 "vm.inc"
3656
+ # line 3657 "vm.inc"
3594
3657
  # undef NAME_OF_CURRENT_INSN
3595
3658
 
3596
3659
  /* ### Instruction trailers. ### */
3597
3660
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3598
- CHECK_CANARY();
3661
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3599
3662
  INC_SP(INSN_ATTR(sp_inc));
3600
3663
  TOPN(0) = val;
3664
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3665
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3601
3666
  if (leaf) ADD_PC(INSN_ATTR(width));
3602
3667
  # undef INSN_ATTR
3603
3668
 
@@ -3622,13 +3687,13 @@ INSN_ENTRY(opt_aref)
3622
3687
 
3623
3688
  /* ### Instruction preambles. ### */
3624
3689
  if (! leaf) ADD_PC(INSN_ATTR(width));
3625
- SETUP_CANARY();
3690
+ SETUP_CANARY(leaf);
3626
3691
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3627
3692
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3628
3693
 
3629
3694
  /* ### Here we do the instruction body. ### */
3630
3695
  # define NAME_OF_CURRENT_INSN opt_aref
3631
- # line 1307 "insns.def"
3696
+ # line 1288 "insns.def"
3632
3697
  {
3633
3698
  val = vm_opt_aref(recv, obj);
3634
3699
 
@@ -3636,14 +3701,16 @@ INSN_ENTRY(opt_aref)
3636
3701
  CALL_SIMPLE_METHOD();
3637
3702
  }
3638
3703
  }
3639
- # line 3640 "vm.inc"
3704
+ # line 3705 "vm.inc"
3640
3705
  # undef NAME_OF_CURRENT_INSN
3641
3706
 
3642
3707
  /* ### Instruction trailers. ### */
3643
3708
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3644
- CHECK_CANARY();
3709
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3645
3710
  INC_SP(INSN_ATTR(sp_inc));
3646
3711
  TOPN(0) = val;
3712
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3713
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3647
3714
  if (leaf) ADD_PC(INSN_ATTR(width));
3648
3715
  # undef INSN_ATTR
3649
3716
 
@@ -3669,13 +3736,13 @@ INSN_ENTRY(opt_aset)
3669
3736
 
3670
3737
  /* ### Instruction preambles. ### */
3671
3738
  if (! leaf) ADD_PC(INSN_ATTR(width));
3672
- SETUP_CANARY();
3739
+ SETUP_CANARY(leaf);
3673
3740
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3674
3741
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3675
3742
 
3676
3743
  /* ### Here we do the instruction body. ### */
3677
3744
  # define NAME_OF_CURRENT_INSN opt_aset
3678
- # line 1324 "insns.def"
3745
+ # line 1305 "insns.def"
3679
3746
  {
3680
3747
  val = vm_opt_aset(recv, obj, set);
3681
3748
 
@@ -3683,14 +3750,16 @@ INSN_ENTRY(opt_aset)
3683
3750
  CALL_SIMPLE_METHOD();
3684
3751
  }
3685
3752
  }
3686
- # line 3687 "vm.inc"
3753
+ # line 3754 "vm.inc"
3687
3754
  # undef NAME_OF_CURRENT_INSN
3688
3755
 
3689
3756
  /* ### Instruction trailers. ### */
3690
3757
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3691
- CHECK_CANARY();
3758
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3692
3759
  INC_SP(INSN_ATTR(sp_inc));
3693
3760
  TOPN(0) = val;
3761
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3762
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3694
3763
  if (leaf) ADD_PC(INSN_ATTR(width));
3695
3764
  # undef INSN_ATTR
3696
3765
 
@@ -3715,36 +3784,38 @@ INSN_ENTRY(opt_aset_with)
3715
3784
 
3716
3785
  /* ### Instruction preambles. ### */
3717
3786
  if (! leaf) ADD_PC(INSN_ATTR(width));
3718
- SETUP_CANARY();
3787
+ SETUP_CANARY(leaf);
3719
3788
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3720
3789
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
3721
3790
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
3722
3791
 
3723
3792
  /* ### Here we do the instruction body. ### */
3724
3793
  # define NAME_OF_CURRENT_INSN opt_aset_with
3725
- # line 1340 "insns.def"
3794
+ # line 1321 "insns.def"
3726
3795
  {
3727
3796
  VALUE tmp = vm_opt_aset_with(recv, key, val);
3728
3797
 
3729
3798
  if (tmp != Qundef) {
3730
- val = tmp;
3799
+ val = tmp;
3731
3800
  }
3732
3801
  else {
3733
3802
  # ifndef MJIT_HEADER
3734
- TOPN(0) = rb_str_resurrect(key);
3735
- PUSH(val);
3803
+ TOPN(0) = rb_str_resurrect(key);
3804
+ PUSH(val);
3736
3805
  # endif
3737
3806
  CALL_SIMPLE_METHOD();
3738
3807
  }
3739
3808
  }
3740
- # line 3741 "vm.inc"
3809
+ # line 3810 "vm.inc"
3741
3810
  # undef NAME_OF_CURRENT_INSN
3742
3811
 
3743
3812
  /* ### Instruction trailers. ### */
3744
3813
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3745
- CHECK_CANARY();
3814
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3746
3815
  INC_SP(INSN_ATTR(sp_inc));
3747
3816
  TOPN(0) = val;
3817
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3818
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3748
3819
  if (leaf) ADD_PC(INSN_ATTR(width));
3749
3820
  # undef INSN_ATTR
3750
3821
 
@@ -3769,32 +3840,34 @@ INSN_ENTRY(opt_aref_with)
3769
3840
 
3770
3841
  /* ### Instruction preambles. ### */
3771
3842
  if (! leaf) ADD_PC(INSN_ATTR(width));
3772
- SETUP_CANARY();
3843
+ SETUP_CANARY(leaf);
3773
3844
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3774
3845
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
3775
3846
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cd);
3776
3847
 
3777
3848
  /* ### Here we do the instruction body. ### */
3778
3849
  # define NAME_OF_CURRENT_INSN opt_aref_with
3779
- # line 1363 "insns.def"
3850
+ # line 1344 "insns.def"
3780
3851
  {
3781
3852
  val = vm_opt_aref_with(recv, key);
3782
3853
 
3783
3854
  if (val == Qundef) {
3784
3855
  # ifndef MJIT_HEADER
3785
- PUSH(rb_str_resurrect(key));
3856
+ PUSH(rb_str_resurrect(key));
3786
3857
  # endif
3787
3858
  CALL_SIMPLE_METHOD();
3788
3859
  }
3789
3860
  }
3790
- # line 3791 "vm.inc"
3861
+ # line 3862 "vm.inc"
3791
3862
  # undef NAME_OF_CURRENT_INSN
3792
3863
 
3793
3864
  /* ### Instruction trailers. ### */
3794
3865
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3795
- CHECK_CANARY();
3866
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3796
3867
  INC_SP(INSN_ATTR(sp_inc));
3797
3868
  TOPN(0) = val;
3869
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3870
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3798
3871
  if (leaf) ADD_PC(INSN_ATTR(width));
3799
3872
  # undef INSN_ATTR
3800
3873
 
@@ -3818,13 +3891,13 @@ INSN_ENTRY(opt_length)
3818
3891
 
3819
3892
  /* ### Instruction preambles. ### */
3820
3893
  if (! leaf) ADD_PC(INSN_ATTR(width));
3821
- SETUP_CANARY();
3894
+ SETUP_CANARY(leaf);
3822
3895
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3823
3896
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3824
3897
 
3825
3898
  /* ### Here we do the instruction body. ### */
3826
3899
  # define NAME_OF_CURRENT_INSN opt_length
3827
- # line 1380 "insns.def"
3900
+ # line 1361 "insns.def"
3828
3901
  {
3829
3902
  val = vm_opt_length(recv, BOP_LENGTH);
3830
3903
 
@@ -3832,14 +3905,16 @@ INSN_ENTRY(opt_length)
3832
3905
  CALL_SIMPLE_METHOD();
3833
3906
  }
3834
3907
  }
3835
- # line 3836 "vm.inc"
3908
+ # line 3909 "vm.inc"
3836
3909
  # undef NAME_OF_CURRENT_INSN
3837
3910
 
3838
3911
  /* ### Instruction trailers. ### */
3839
3912
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3840
- CHECK_CANARY();
3913
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3841
3914
  INC_SP(INSN_ATTR(sp_inc));
3842
3915
  TOPN(0) = val;
3916
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3917
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3843
3918
  if (leaf) ADD_PC(INSN_ATTR(width));
3844
3919
  # undef INSN_ATTR
3845
3920
 
@@ -3863,13 +3938,13 @@ INSN_ENTRY(opt_size)
3863
3938
 
3864
3939
  /* ### Instruction preambles. ### */
3865
3940
  if (! leaf) ADD_PC(INSN_ATTR(width));
3866
- SETUP_CANARY();
3941
+ SETUP_CANARY(leaf);
3867
3942
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3868
3943
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3869
3944
 
3870
3945
  /* ### Here we do the instruction body. ### */
3871
3946
  # define NAME_OF_CURRENT_INSN opt_size
3872
- # line 1394 "insns.def"
3947
+ # line 1375 "insns.def"
3873
3948
  {
3874
3949
  val = vm_opt_length(recv, BOP_SIZE);
3875
3950
 
@@ -3877,14 +3952,16 @@ INSN_ENTRY(opt_size)
3877
3952
  CALL_SIMPLE_METHOD();
3878
3953
  }
3879
3954
  }
3880
- # line 3881 "vm.inc"
3955
+ # line 3956 "vm.inc"
3881
3956
  # undef NAME_OF_CURRENT_INSN
3882
3957
 
3883
3958
  /* ### Instruction trailers. ### */
3884
3959
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3885
- CHECK_CANARY();
3960
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3886
3961
  INC_SP(INSN_ATTR(sp_inc));
3887
3962
  TOPN(0) = val;
3963
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3964
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3888
3965
  if (leaf) ADD_PC(INSN_ATTR(width));
3889
3966
  # undef INSN_ATTR
3890
3967
 
@@ -3908,13 +3985,13 @@ INSN_ENTRY(opt_empty_p)
3908
3985
 
3909
3986
  /* ### Instruction preambles. ### */
3910
3987
  if (! leaf) ADD_PC(INSN_ATTR(width));
3911
- SETUP_CANARY();
3988
+ SETUP_CANARY(leaf);
3912
3989
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3913
3990
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3914
3991
 
3915
3992
  /* ### Here we do the instruction body. ### */
3916
3993
  # define NAME_OF_CURRENT_INSN opt_empty_p
3917
- # line 1408 "insns.def"
3994
+ # line 1389 "insns.def"
3918
3995
  {
3919
3996
  val = vm_opt_empty_p(recv);
3920
3997
 
@@ -3922,14 +3999,16 @@ INSN_ENTRY(opt_empty_p)
3922
3999
  CALL_SIMPLE_METHOD();
3923
4000
  }
3924
4001
  }
3925
- # line 3926 "vm.inc"
4002
+ # line 4003 "vm.inc"
3926
4003
  # undef NAME_OF_CURRENT_INSN
3927
4004
 
3928
4005
  /* ### Instruction trailers. ### */
3929
4006
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3930
- CHECK_CANARY();
4007
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3931
4008
  INC_SP(INSN_ATTR(sp_inc));
3932
4009
  TOPN(0) = val;
4010
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4011
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3933
4012
  if (leaf) ADD_PC(INSN_ATTR(width));
3934
4013
  # undef INSN_ATTR
3935
4014
 
@@ -3953,13 +4032,13 @@ INSN_ENTRY(opt_succ)
3953
4032
 
3954
4033
  /* ### Instruction preambles. ### */
3955
4034
  if (! leaf) ADD_PC(INSN_ATTR(width));
3956
- SETUP_CANARY();
4035
+ SETUP_CANARY(leaf);
3957
4036
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3958
4037
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3959
4038
 
3960
4039
  /* ### Here we do the instruction body. ### */
3961
4040
  # define NAME_OF_CURRENT_INSN opt_succ
3962
- # line 1422 "insns.def"
4041
+ # line 1403 "insns.def"
3963
4042
  {
3964
4043
  val = vm_opt_succ(recv);
3965
4044
 
@@ -3967,14 +4046,16 @@ INSN_ENTRY(opt_succ)
3967
4046
  CALL_SIMPLE_METHOD();
3968
4047
  }
3969
4048
  }
3970
- # line 3971 "vm.inc"
4049
+ # line 4050 "vm.inc"
3971
4050
  # undef NAME_OF_CURRENT_INSN
3972
4051
 
3973
4052
  /* ### Instruction trailers. ### */
3974
4053
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3975
- CHECK_CANARY();
4054
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
3976
4055
  INC_SP(INSN_ATTR(sp_inc));
3977
4056
  TOPN(0) = val;
4057
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4058
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3978
4059
  if (leaf) ADD_PC(INSN_ATTR(width));
3979
4060
  # undef INSN_ATTR
3980
4061
 
@@ -3998,28 +4079,30 @@ INSN_ENTRY(opt_not)
3998
4079
 
3999
4080
  /* ### Instruction preambles. ### */
4000
4081
  if (! leaf) ADD_PC(INSN_ATTR(width));
4001
- SETUP_CANARY();
4082
+ SETUP_CANARY(leaf);
4002
4083
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4003
4084
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
4004
4085
 
4005
4086
  /* ### Here we do the instruction body. ### */
4006
4087
  # define NAME_OF_CURRENT_INSN opt_not
4007
- # line 1436 "insns.def"
4088
+ # line 1417 "insns.def"
4008
4089
  {
4009
- val = vm_opt_not(cd, recv);
4090
+ val = vm_opt_not(GET_ISEQ(), cd, recv);
4010
4091
 
4011
4092
  if (val == Qundef) {
4012
4093
  CALL_SIMPLE_METHOD();
4013
4094
  }
4014
4095
  }
4015
- # line 4016 "vm.inc"
4096
+ # line 4097 "vm.inc"
4016
4097
  # undef NAME_OF_CURRENT_INSN
4017
4098
 
4018
4099
  /* ### Instruction trailers. ### */
4019
4100
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4020
- CHECK_CANARY();
4101
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4021
4102
  INC_SP(INSN_ATTR(sp_inc));
4022
4103
  TOPN(0) = val;
4104
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4105
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4023
4106
  if (leaf) ADD_PC(INSN_ATTR(width));
4024
4107
  # undef INSN_ATTR
4025
4108
 
@@ -4044,13 +4127,13 @@ INSN_ENTRY(opt_regexpmatch2)
4044
4127
 
4045
4128
  /* ### Instruction preambles. ### */
4046
4129
  if (! leaf) ADD_PC(INSN_ATTR(width));
4047
- SETUP_CANARY();
4130
+ SETUP_CANARY(leaf);
4048
4131
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4049
4132
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
4050
4133
 
4051
4134
  /* ### Here we do the instruction body. ### */
4052
4135
  # define NAME_OF_CURRENT_INSN opt_regexpmatch2
4053
- # line 1451 "insns.def"
4136
+ # line 1432 "insns.def"
4054
4137
  {
4055
4138
  val = vm_opt_regexpmatch2(obj2, obj1);
4056
4139
 
@@ -4058,14 +4141,16 @@ INSN_ENTRY(opt_regexpmatch2)
4058
4141
  CALL_SIMPLE_METHOD();
4059
4142
  }
4060
4143
  }
4061
- # line 4062 "vm.inc"
4144
+ # line 4145 "vm.inc"
4062
4145
  # undef NAME_OF_CURRENT_INSN
4063
4146
 
4064
4147
  /* ### Instruction trailers. ### */
4065
4148
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4066
- CHECK_CANARY();
4149
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4067
4150
  INC_SP(INSN_ATTR(sp_inc));
4068
4151
  TOPN(0) = val;
4152
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4153
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4069
4154
  if (leaf) ADD_PC(INSN_ATTR(width));
4070
4155
  # undef INSN_ATTR
4071
4156
 
@@ -4073,54 +4158,7 @@ INSN_ENTRY(opt_regexpmatch2)
4073
4158
  END_INSN(opt_regexpmatch2);
4074
4159
  }
4075
4160
 
4076
- /* insn opt_call_c_function(funcptr)()() */
4077
- INSN_ENTRY(opt_call_c_function)
4078
- {
4079
- /* ### Declare that we have just entered into an instruction. ### */
4080
- START_OF_ORIGINAL_INSN(opt_call_c_function);
4081
- DEBUG_ENTER_INSN("opt_call_c_function");
4082
-
4083
- /* ### Declare and assign variables. ### */
4084
- rb_insn_func_t funcptr = (rb_insn_func_t)GET_OPERAND(1);
4085
- # define INSN_ATTR(x) attr_ ## x ## _opt_call_c_function(funcptr)
4086
- bool leaf = INSN_ATTR(leaf);
4087
-
4088
- /* ### Instruction preambles. ### */
4089
- if (! leaf) ADD_PC(INSN_ATTR(width));
4090
- POPN(INSN_ATTR(popn));
4091
- SETUP_CANARY();
4092
- COLLECT_USAGE_INSN(INSN_ATTR(bin));
4093
- COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, funcptr);
4094
-
4095
- /* ### Here we do the instruction body. ### */
4096
- # define NAME_OF_CURRENT_INSN opt_call_c_function
4097
- # line 1467 "insns.def"
4098
- {
4099
- reg_cfp = (funcptr)(ec, reg_cfp);
4100
-
4101
- if (reg_cfp == 0) {
4102
- VALUE err = ec->errinfo;
4103
- ec->errinfo = Qnil;
4104
- THROW_EXCEPTION(err);
4105
- }
4106
-
4107
- RESTORE_REGS();
4108
- NEXT_INSN();
4109
- }
4110
- # line 4111 "vm.inc"
4111
- # undef NAME_OF_CURRENT_INSN
4112
-
4113
- /* ### Instruction trailers. ### */
4114
- CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4115
- CHECK_CANARY();
4116
- if (leaf) ADD_PC(INSN_ATTR(width));
4117
- # undef INSN_ATTR
4118
-
4119
- /* ### Leave the instruction. ### */
4120
- END_INSN(opt_call_c_function);
4121
- }
4122
-
4123
- /* insn invokebuiltin(bf)(...)(ret) */
4161
+ /* insn invokebuiltin(bf)(...)(val) */
4124
4162
  INSN_ENTRY(invokebuiltin)
4125
4163
  {
4126
4164
  /* ### Declare that we have just entered into an instruction. ### */
@@ -4131,28 +4169,30 @@ INSN_ENTRY(invokebuiltin)
4131
4169
  RB_BUILTIN bf = (RB_BUILTIN)GET_OPERAND(1);
4132
4170
  # define INSN_ATTR(x) attr_ ## x ## _invokebuiltin(bf)
4133
4171
  bool leaf = INSN_ATTR(leaf);
4134
- VALUE ret;
4172
+ VALUE val;
4135
4173
 
4136
4174
  /* ### Instruction preambles. ### */
4137
4175
  if (! leaf) ADD_PC(INSN_ATTR(width));
4138
- SETUP_CANARY();
4176
+ SETUP_CANARY(leaf);
4139
4177
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4140
4178
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, bf);
4141
4179
 
4142
4180
  /* ### Here we do the instruction body. ### */
4143
4181
  # define NAME_OF_CURRENT_INSN invokebuiltin
4144
- # line 1488 "insns.def"
4182
+ # line 1469 "insns.def"
4145
4183
  {
4146
- ret = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc));
4184
+ val = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc));
4147
4185
  }
4148
- # line 4149 "vm.inc"
4186
+ # line 4187 "vm.inc"
4149
4187
  # undef NAME_OF_CURRENT_INSN
4150
4188
 
4151
4189
  /* ### Instruction trailers. ### */
4152
4190
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4153
- CHECK_CANARY();
4191
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4154
4192
  INC_SP(INSN_ATTR(sp_inc));
4155
- TOPN(0) = ret;
4193
+ TOPN(0) = val;
4194
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4195
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4156
4196
  if (leaf) ADD_PC(INSN_ATTR(width));
4157
4197
  # undef INSN_ATTR
4158
4198
 
@@ -4160,7 +4200,7 @@ INSN_ENTRY(invokebuiltin)
4160
4200
  END_INSN(invokebuiltin);
4161
4201
  }
4162
4202
 
4163
- /* insn opt_invokebuiltin_delegate(bf, index)()(ret) */
4203
+ /* insn opt_invokebuiltin_delegate(bf, index)()(val) */
4164
4204
  INSN_ENTRY(opt_invokebuiltin_delegate)
4165
4205
  {
4166
4206
  /* ### Declare that we have just entered into an instruction. ### */
@@ -4172,29 +4212,31 @@ INSN_ENTRY(opt_invokebuiltin_delegate)
4172
4212
  rb_num_t index = (rb_num_t)GET_OPERAND(2);
4173
4213
  # define INSN_ATTR(x) attr_ ## x ## _opt_invokebuiltin_delegate(bf, index)
4174
4214
  bool leaf = INSN_ATTR(leaf);
4175
- VALUE ret;
4215
+ VALUE val;
4176
4216
 
4177
4217
  /* ### Instruction preambles. ### */
4178
4218
  if (! leaf) ADD_PC(INSN_ATTR(width));
4179
- SETUP_CANARY();
4219
+ SETUP_CANARY(leaf);
4180
4220
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4181
4221
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, bf);
4182
4222
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, index);
4183
4223
 
4184
4224
  /* ### Here we do the instruction body. ### */
4185
4225
  # define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate
4186
- # line 1499 "insns.def"
4226
+ # line 1480 "insns.def"
4187
4227
  {
4188
- ret = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4228
+ val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4189
4229
  }
4190
- # line 4191 "vm.inc"
4230
+ # line 4231 "vm.inc"
4191
4231
  # undef NAME_OF_CURRENT_INSN
4192
4232
 
4193
4233
  /* ### Instruction trailers. ### */
4194
4234
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4195
- CHECK_CANARY();
4235
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4196
4236
  INC_SP(INSN_ATTR(sp_inc));
4197
- TOPN(0) = ret;
4237
+ TOPN(0) = val;
4238
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4239
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4198
4240
  if (leaf) ADD_PC(INSN_ATTR(width));
4199
4241
  # undef INSN_ATTR
4200
4242
 
@@ -4218,19 +4260,19 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4218
4260
 
4219
4261
  /* ### Instruction preambles. ### */
4220
4262
  if (! leaf) ADD_PC(INSN_ATTR(width));
4221
- SETUP_CANARY();
4263
+ SETUP_CANARY(leaf);
4222
4264
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4223
4265
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, bf);
4224
4266
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, index);
4225
4267
 
4226
4268
  /* ### Here we do the instruction body. ### */
4227
4269
  # define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate_leave
4228
- # line 1510 "insns.def"
4270
+ # line 1491 "insns.def"
4229
4271
  {
4230
4272
  val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4231
4273
 
4232
4274
  /* leave fastpath */
4233
- /* TracePoint/return should fallback this insn to opt_invokebuiltin_delegate */
4275
+ /* TracePoint/return fallbacks this insn to opt_invokebuiltin_delegate */
4234
4276
  if (vm_pop_frame(ec, GET_CFP(), GET_EP())) {
4235
4277
  # if OPT_CALL_THREADED_CODE
4236
4278
  rb_ec_thread_ptr(ec)->retval = val;
@@ -4243,14 +4285,16 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4243
4285
  RESTORE_REGS();
4244
4286
  }
4245
4287
  }
4246
- # line 4247 "vm.inc"
4288
+ # line 4289 "vm.inc"
4247
4289
  # undef NAME_OF_CURRENT_INSN
4248
4290
 
4249
4291
  /* ### Instruction trailers. ### */
4250
4292
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4251
- CHECK_CANARY();
4293
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4252
4294
  INC_SP(INSN_ATTR(sp_inc));
4253
4295
  TOPN(0) = val;
4296
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4297
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4254
4298
  if (leaf) ADD_PC(INSN_ATTR(width));
4255
4299
  # undef INSN_ATTR
4256
4300
 
@@ -4268,7 +4312,7 @@ INSN_ENTRY(getlocal_WC_0)
4268
4312
  /* ### Declare and assign variables. ### */
4269
4313
  #line 10 "defs/opt_operand.def"
4270
4314
  const rb_num_t level = 0;
4271
- #line 4272 "vm.inc"
4315
+ #line 4316 "vm.inc"
4272
4316
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4273
4317
  # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_0(idx)
4274
4318
  bool leaf = INSN_ATTR(leaf);
@@ -4276,7 +4320,7 @@ INSN_ENTRY(getlocal_WC_0)
4276
4320
 
4277
4321
  /* ### Instruction preambles. ### */
4278
4322
  if (! leaf) ADD_PC(INSN_ATTR(width));
4279
- SETUP_CANARY();
4323
+ SETUP_CANARY(leaf);
4280
4324
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4281
4325
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
4282
4326
 
@@ -4288,14 +4332,16 @@ INSN_ENTRY(getlocal_WC_0)
4288
4332
  RB_DEBUG_COUNTER_INC(lvar_get);
4289
4333
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
4290
4334
  }
4291
- # line 4292 "vm.inc"
4335
+ # line 4336 "vm.inc"
4292
4336
  # undef NAME_OF_CURRENT_INSN
4293
4337
 
4294
4338
  /* ### Instruction trailers. ### */
4295
4339
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4296
- CHECK_CANARY();
4340
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4297
4341
  INC_SP(INSN_ATTR(sp_inc));
4298
4342
  TOPN(0) = val;
4343
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4344
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4299
4345
  if (leaf) ADD_PC(INSN_ATTR(width));
4300
4346
  # undef INSN_ATTR
4301
4347
 
@@ -4313,7 +4359,7 @@ INSN_ENTRY(getlocal_WC_1)
4313
4359
  /* ### Declare and assign variables. ### */
4314
4360
  #line 11 "defs/opt_operand.def"
4315
4361
  const rb_num_t level = 1;
4316
- #line 4317 "vm.inc"
4362
+ #line 4363 "vm.inc"
4317
4363
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4318
4364
  # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_1(idx)
4319
4365
  bool leaf = INSN_ATTR(leaf);
@@ -4321,7 +4367,7 @@ INSN_ENTRY(getlocal_WC_1)
4321
4367
 
4322
4368
  /* ### Instruction preambles. ### */
4323
4369
  if (! leaf) ADD_PC(INSN_ATTR(width));
4324
- SETUP_CANARY();
4370
+ SETUP_CANARY(leaf);
4325
4371
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4326
4372
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
4327
4373
 
@@ -4333,14 +4379,16 @@ INSN_ENTRY(getlocal_WC_1)
4333
4379
  RB_DEBUG_COUNTER_INC(lvar_get);
4334
4380
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
4335
4381
  }
4336
- # line 4337 "vm.inc"
4382
+ # line 4383 "vm.inc"
4337
4383
  # undef NAME_OF_CURRENT_INSN
4338
4384
 
4339
4385
  /* ### Instruction trailers. ### */
4340
4386
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4341
- CHECK_CANARY();
4387
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4342
4388
  INC_SP(INSN_ATTR(sp_inc));
4343
4389
  TOPN(0) = val;
4390
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4391
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4344
4392
  if (leaf) ADD_PC(INSN_ATTR(width));
4345
4393
  # undef INSN_ATTR
4346
4394
 
@@ -4358,7 +4406,7 @@ INSN_ENTRY(setlocal_WC_0)
4358
4406
  /* ### Declare and assign variables. ### */
4359
4407
  #line 12 "defs/opt_operand.def"
4360
4408
  const rb_num_t level = 0;
4361
- #line 4362 "vm.inc"
4409
+ #line 4410 "vm.inc"
4362
4410
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4363
4411
  # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_0(idx)
4364
4412
  bool leaf = INSN_ATTR(leaf);
@@ -4366,7 +4414,7 @@ INSN_ENTRY(setlocal_WC_0)
4366
4414
 
4367
4415
  /* ### Instruction preambles. ### */
4368
4416
  if (! leaf) ADD_PC(INSN_ATTR(width));
4369
- SETUP_CANARY();
4417
+ SETUP_CANARY(leaf);
4370
4418
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4371
4419
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
4372
4420
 
@@ -4378,12 +4426,12 @@ INSN_ENTRY(setlocal_WC_0)
4378
4426
  RB_DEBUG_COUNTER_INC(lvar_set);
4379
4427
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
4380
4428
  }
4381
- # line 4382 "vm.inc"
4429
+ # line 4430 "vm.inc"
4382
4430
  # undef NAME_OF_CURRENT_INSN
4383
4431
 
4384
4432
  /* ### Instruction trailers. ### */
4385
4433
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4386
- CHECK_CANARY();
4434
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4387
4435
  INC_SP(INSN_ATTR(sp_inc));
4388
4436
  if (leaf) ADD_PC(INSN_ATTR(width));
4389
4437
  # undef INSN_ATTR
@@ -4402,7 +4450,7 @@ INSN_ENTRY(setlocal_WC_1)
4402
4450
  /* ### Declare and assign variables. ### */
4403
4451
  #line 13 "defs/opt_operand.def"
4404
4452
  const rb_num_t level = 1;
4405
- #line 4406 "vm.inc"
4453
+ #line 4454 "vm.inc"
4406
4454
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4407
4455
  # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_1(idx)
4408
4456
  bool leaf = INSN_ATTR(leaf);
@@ -4410,7 +4458,7 @@ INSN_ENTRY(setlocal_WC_1)
4410
4458
 
4411
4459
  /* ### Instruction preambles. ### */
4412
4460
  if (! leaf) ADD_PC(INSN_ATTR(width));
4413
- SETUP_CANARY();
4461
+ SETUP_CANARY(leaf);
4414
4462
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4415
4463
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
4416
4464
 
@@ -4422,12 +4470,12 @@ INSN_ENTRY(setlocal_WC_1)
4422
4470
  RB_DEBUG_COUNTER_INC(lvar_set);
4423
4471
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
4424
4472
  }
4425
- # line 4426 "vm.inc"
4473
+ # line 4474 "vm.inc"
4426
4474
  # undef NAME_OF_CURRENT_INSN
4427
4475
 
4428
4476
  /* ### Instruction trailers. ### */
4429
4477
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4430
- CHECK_CANARY();
4478
+ CHECK_CANARY(leaf, INSN_ATTR(bin));
4431
4479
  INC_SP(INSN_ATTR(sp_inc));
4432
4480
  if (leaf) ADD_PC(INSN_ATTR(width));
4433
4481
  # undef INSN_ATTR
@@ -4446,7 +4494,7 @@ INSN_ENTRY(putobject_INT2FIX_0_)
4446
4494
  /* ### Declare and assign variables. ### */
4447
4495
  #line 15 "defs/opt_operand.def"
4448
4496
  const VALUE val = INT2FIX(0);
4449
- #line 4450 "vm.inc"
4497
+ #line 4498 "vm.inc"
4450
4498
  # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_0_()
4451
4499
  bool leaf = INSN_ATTR(leaf);
4452
4500
 
@@ -4458,6 +4506,8 @@ INSN_ENTRY(putobject_INT2FIX_0_)
4458
4506
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4459
4507
  INC_SP(INSN_ATTR(sp_inc));
4460
4508
  TOPN(0) = val;
4509
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4510
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4461
4511
  if (leaf) ADD_PC(INSN_ATTR(width));
4462
4512
  # undef INSN_ATTR
4463
4513
 
@@ -4475,7 +4525,7 @@ INSN_ENTRY(putobject_INT2FIX_1_)
4475
4525
  /* ### Declare and assign variables. ### */
4476
4526
  #line 16 "defs/opt_operand.def"
4477
4527
  const VALUE val = INT2FIX(1);
4478
- #line 4479 "vm.inc"
4528
+ #line 4529 "vm.inc"
4479
4529
  # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_1_()
4480
4530
  bool leaf = INSN_ATTR(leaf);
4481
4531
 
@@ -4487,6 +4537,8 @@ INSN_ENTRY(putobject_INT2FIX_1_)
4487
4537
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4488
4538
  INC_SP(INSN_ATTR(sp_inc));
4489
4539
  TOPN(0) = val;
4540
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4541
+ VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4490
4542
  if (leaf) ADD_PC(INSN_ATTR(width));
4491
4543
  # undef INSN_ATTR
4492
4544
 
@@ -4497,7 +4549,7 @@ INSN_ENTRY(putobject_INT2FIX_1_)
4497
4549
  /* insn trace_nop(...)(...)(...) */
4498
4550
  INSN_ENTRY(trace_nop)
4499
4551
  {
4500
- vm_trace(ec, GET_CFP(), GET_PC());
4552
+ vm_trace(ec, GET_CFP());
4501
4553
  DISPATCH_ORIGINAL_INSN(nop);
4502
4554
  END_INSN(trace_nop);
4503
4555
  }
@@ -4505,7 +4557,7 @@ INSN_ENTRY(trace_nop)
4505
4557
  /* insn trace_getlocal(...)(...)(...) */
4506
4558
  INSN_ENTRY(trace_getlocal)
4507
4559
  {
4508
- vm_trace(ec, GET_CFP(), GET_PC());
4560
+ vm_trace(ec, GET_CFP());
4509
4561
  DISPATCH_ORIGINAL_INSN(getlocal);
4510
4562
  END_INSN(trace_getlocal);
4511
4563
  }
@@ -4513,7 +4565,7 @@ INSN_ENTRY(trace_getlocal)
4513
4565
  /* insn trace_setlocal(...)(...)(...) */
4514
4566
  INSN_ENTRY(trace_setlocal)
4515
4567
  {
4516
- vm_trace(ec, GET_CFP(), GET_PC());
4568
+ vm_trace(ec, GET_CFP());
4517
4569
  DISPATCH_ORIGINAL_INSN(setlocal);
4518
4570
  END_INSN(trace_setlocal);
4519
4571
  }
@@ -4521,7 +4573,7 @@ INSN_ENTRY(trace_setlocal)
4521
4573
  /* insn trace_getblockparam(...)(...)(...) */
4522
4574
  INSN_ENTRY(trace_getblockparam)
4523
4575
  {
4524
- vm_trace(ec, GET_CFP(), GET_PC());
4576
+ vm_trace(ec, GET_CFP());
4525
4577
  DISPATCH_ORIGINAL_INSN(getblockparam);
4526
4578
  END_INSN(trace_getblockparam);
4527
4579
  }
@@ -4529,7 +4581,7 @@ INSN_ENTRY(trace_getblockparam)
4529
4581
  /* insn trace_setblockparam(...)(...)(...) */
4530
4582
  INSN_ENTRY(trace_setblockparam)
4531
4583
  {
4532
- vm_trace(ec, GET_CFP(), GET_PC());
4584
+ vm_trace(ec, GET_CFP());
4533
4585
  DISPATCH_ORIGINAL_INSN(setblockparam);
4534
4586
  END_INSN(trace_setblockparam);
4535
4587
  }
@@ -4537,7 +4589,7 @@ INSN_ENTRY(trace_setblockparam)
4537
4589
  /* insn trace_getblockparamproxy(...)(...)(...) */
4538
4590
  INSN_ENTRY(trace_getblockparamproxy)
4539
4591
  {
4540
- vm_trace(ec, GET_CFP(), GET_PC());
4592
+ vm_trace(ec, GET_CFP());
4541
4593
  DISPATCH_ORIGINAL_INSN(getblockparamproxy);
4542
4594
  END_INSN(trace_getblockparamproxy);
4543
4595
  }
@@ -4545,7 +4597,7 @@ INSN_ENTRY(trace_getblockparamproxy)
4545
4597
  /* insn trace_getspecial(...)(...)(...) */
4546
4598
  INSN_ENTRY(trace_getspecial)
4547
4599
  {
4548
- vm_trace(ec, GET_CFP(), GET_PC());
4600
+ vm_trace(ec, GET_CFP());
4549
4601
  DISPATCH_ORIGINAL_INSN(getspecial);
4550
4602
  END_INSN(trace_getspecial);
4551
4603
  }
@@ -4553,7 +4605,7 @@ INSN_ENTRY(trace_getspecial)
4553
4605
  /* insn trace_setspecial(...)(...)(...) */
4554
4606
  INSN_ENTRY(trace_setspecial)
4555
4607
  {
4556
- vm_trace(ec, GET_CFP(), GET_PC());
4608
+ vm_trace(ec, GET_CFP());
4557
4609
  DISPATCH_ORIGINAL_INSN(setspecial);
4558
4610
  END_INSN(trace_setspecial);
4559
4611
  }
@@ -4561,7 +4613,7 @@ INSN_ENTRY(trace_setspecial)
4561
4613
  /* insn trace_getinstancevariable(...)(...)(...) */
4562
4614
  INSN_ENTRY(trace_getinstancevariable)
4563
4615
  {
4564
- vm_trace(ec, GET_CFP(), GET_PC());
4616
+ vm_trace(ec, GET_CFP());
4565
4617
  DISPATCH_ORIGINAL_INSN(getinstancevariable);
4566
4618
  END_INSN(trace_getinstancevariable);
4567
4619
  }
@@ -4569,7 +4621,7 @@ INSN_ENTRY(trace_getinstancevariable)
4569
4621
  /* insn trace_setinstancevariable(...)(...)(...) */
4570
4622
  INSN_ENTRY(trace_setinstancevariable)
4571
4623
  {
4572
- vm_trace(ec, GET_CFP(), GET_PC());
4624
+ vm_trace(ec, GET_CFP());
4573
4625
  DISPATCH_ORIGINAL_INSN(setinstancevariable);
4574
4626
  END_INSN(trace_setinstancevariable);
4575
4627
  }
@@ -4577,7 +4629,7 @@ INSN_ENTRY(trace_setinstancevariable)
4577
4629
  /* insn trace_getclassvariable(...)(...)(...) */
4578
4630
  INSN_ENTRY(trace_getclassvariable)
4579
4631
  {
4580
- vm_trace(ec, GET_CFP(), GET_PC());
4632
+ vm_trace(ec, GET_CFP());
4581
4633
  DISPATCH_ORIGINAL_INSN(getclassvariable);
4582
4634
  END_INSN(trace_getclassvariable);
4583
4635
  }
@@ -4585,7 +4637,7 @@ INSN_ENTRY(trace_getclassvariable)
4585
4637
  /* insn trace_setclassvariable(...)(...)(...) */
4586
4638
  INSN_ENTRY(trace_setclassvariable)
4587
4639
  {
4588
- vm_trace(ec, GET_CFP(), GET_PC());
4640
+ vm_trace(ec, GET_CFP());
4589
4641
  DISPATCH_ORIGINAL_INSN(setclassvariable);
4590
4642
  END_INSN(trace_setclassvariable);
4591
4643
  }
@@ -4593,7 +4645,7 @@ INSN_ENTRY(trace_setclassvariable)
4593
4645
  /* insn trace_getconstant(...)(...)(...) */
4594
4646
  INSN_ENTRY(trace_getconstant)
4595
4647
  {
4596
- vm_trace(ec, GET_CFP(), GET_PC());
4648
+ vm_trace(ec, GET_CFP());
4597
4649
  DISPATCH_ORIGINAL_INSN(getconstant);
4598
4650
  END_INSN(trace_getconstant);
4599
4651
  }
@@ -4601,7 +4653,7 @@ INSN_ENTRY(trace_getconstant)
4601
4653
  /* insn trace_setconstant(...)(...)(...) */
4602
4654
  INSN_ENTRY(trace_setconstant)
4603
4655
  {
4604
- vm_trace(ec, GET_CFP(), GET_PC());
4656
+ vm_trace(ec, GET_CFP());
4605
4657
  DISPATCH_ORIGINAL_INSN(setconstant);
4606
4658
  END_INSN(trace_setconstant);
4607
4659
  }
@@ -4609,7 +4661,7 @@ INSN_ENTRY(trace_setconstant)
4609
4661
  /* insn trace_getglobal(...)(...)(...) */
4610
4662
  INSN_ENTRY(trace_getglobal)
4611
4663
  {
4612
- vm_trace(ec, GET_CFP(), GET_PC());
4664
+ vm_trace(ec, GET_CFP());
4613
4665
  DISPATCH_ORIGINAL_INSN(getglobal);
4614
4666
  END_INSN(trace_getglobal);
4615
4667
  }
@@ -4617,7 +4669,7 @@ INSN_ENTRY(trace_getglobal)
4617
4669
  /* insn trace_setglobal(...)(...)(...) */
4618
4670
  INSN_ENTRY(trace_setglobal)
4619
4671
  {
4620
- vm_trace(ec, GET_CFP(), GET_PC());
4672
+ vm_trace(ec, GET_CFP());
4621
4673
  DISPATCH_ORIGINAL_INSN(setglobal);
4622
4674
  END_INSN(trace_setglobal);
4623
4675
  }
@@ -4625,7 +4677,7 @@ INSN_ENTRY(trace_setglobal)
4625
4677
  /* insn trace_putnil(...)(...)(...) */
4626
4678
  INSN_ENTRY(trace_putnil)
4627
4679
  {
4628
- vm_trace(ec, GET_CFP(), GET_PC());
4680
+ vm_trace(ec, GET_CFP());
4629
4681
  DISPATCH_ORIGINAL_INSN(putnil);
4630
4682
  END_INSN(trace_putnil);
4631
4683
  }
@@ -4633,7 +4685,7 @@ INSN_ENTRY(trace_putnil)
4633
4685
  /* insn trace_putself(...)(...)(...) */
4634
4686
  INSN_ENTRY(trace_putself)
4635
4687
  {
4636
- vm_trace(ec, GET_CFP(), GET_PC());
4688
+ vm_trace(ec, GET_CFP());
4637
4689
  DISPATCH_ORIGINAL_INSN(putself);
4638
4690
  END_INSN(trace_putself);
4639
4691
  }
@@ -4641,7 +4693,7 @@ INSN_ENTRY(trace_putself)
4641
4693
  /* insn trace_putobject(...)(...)(...) */
4642
4694
  INSN_ENTRY(trace_putobject)
4643
4695
  {
4644
- vm_trace(ec, GET_CFP(), GET_PC());
4696
+ vm_trace(ec, GET_CFP());
4645
4697
  DISPATCH_ORIGINAL_INSN(putobject);
4646
4698
  END_INSN(trace_putobject);
4647
4699
  }
@@ -4649,7 +4701,7 @@ INSN_ENTRY(trace_putobject)
4649
4701
  /* insn trace_putspecialobject(...)(...)(...) */
4650
4702
  INSN_ENTRY(trace_putspecialobject)
4651
4703
  {
4652
- vm_trace(ec, GET_CFP(), GET_PC());
4704
+ vm_trace(ec, GET_CFP());
4653
4705
  DISPATCH_ORIGINAL_INSN(putspecialobject);
4654
4706
  END_INSN(trace_putspecialobject);
4655
4707
  }
@@ -4657,7 +4709,7 @@ INSN_ENTRY(trace_putspecialobject)
4657
4709
  /* insn trace_putstring(...)(...)(...) */
4658
4710
  INSN_ENTRY(trace_putstring)
4659
4711
  {
4660
- vm_trace(ec, GET_CFP(), GET_PC());
4712
+ vm_trace(ec, GET_CFP());
4661
4713
  DISPATCH_ORIGINAL_INSN(putstring);
4662
4714
  END_INSN(trace_putstring);
4663
4715
  }
@@ -4665,7 +4717,7 @@ INSN_ENTRY(trace_putstring)
4665
4717
  /* insn trace_concatstrings(...)(...)(...) */
4666
4718
  INSN_ENTRY(trace_concatstrings)
4667
4719
  {
4668
- vm_trace(ec, GET_CFP(), GET_PC());
4720
+ vm_trace(ec, GET_CFP());
4669
4721
  DISPATCH_ORIGINAL_INSN(concatstrings);
4670
4722
  END_INSN(trace_concatstrings);
4671
4723
  }
@@ -4673,23 +4725,15 @@ INSN_ENTRY(trace_concatstrings)
4673
4725
  /* insn trace_tostring(...)(...)(...) */
4674
4726
  INSN_ENTRY(trace_tostring)
4675
4727
  {
4676
- vm_trace(ec, GET_CFP(), GET_PC());
4728
+ vm_trace(ec, GET_CFP());
4677
4729
  DISPATCH_ORIGINAL_INSN(tostring);
4678
4730
  END_INSN(trace_tostring);
4679
4731
  }
4680
4732
 
4681
- /* insn trace_freezestring(...)(...)(...) */
4682
- INSN_ENTRY(trace_freezestring)
4683
- {
4684
- vm_trace(ec, GET_CFP(), GET_PC());
4685
- DISPATCH_ORIGINAL_INSN(freezestring);
4686
- END_INSN(trace_freezestring);
4687
- }
4688
-
4689
4733
  /* insn trace_toregexp(...)(...)(...) */
4690
4734
  INSN_ENTRY(trace_toregexp)
4691
4735
  {
4692
- vm_trace(ec, GET_CFP(), GET_PC());
4736
+ vm_trace(ec, GET_CFP());
4693
4737
  DISPATCH_ORIGINAL_INSN(toregexp);
4694
4738
  END_INSN(trace_toregexp);
4695
4739
  }
@@ -4697,7 +4741,7 @@ INSN_ENTRY(trace_toregexp)
4697
4741
  /* insn trace_intern(...)(...)(...) */
4698
4742
  INSN_ENTRY(trace_intern)
4699
4743
  {
4700
- vm_trace(ec, GET_CFP(), GET_PC());
4744
+ vm_trace(ec, GET_CFP());
4701
4745
  DISPATCH_ORIGINAL_INSN(intern);
4702
4746
  END_INSN(trace_intern);
4703
4747
  }
@@ -4705,7 +4749,7 @@ INSN_ENTRY(trace_intern)
4705
4749
  /* insn trace_newarray(...)(...)(...) */
4706
4750
  INSN_ENTRY(trace_newarray)
4707
4751
  {
4708
- vm_trace(ec, GET_CFP(), GET_PC());
4752
+ vm_trace(ec, GET_CFP());
4709
4753
  DISPATCH_ORIGINAL_INSN(newarray);
4710
4754
  END_INSN(trace_newarray);
4711
4755
  }
@@ -4713,7 +4757,7 @@ INSN_ENTRY(trace_newarray)
4713
4757
  /* insn trace_newarraykwsplat(...)(...)(...) */
4714
4758
  INSN_ENTRY(trace_newarraykwsplat)
4715
4759
  {
4716
- vm_trace(ec, GET_CFP(), GET_PC());
4760
+ vm_trace(ec, GET_CFP());
4717
4761
  DISPATCH_ORIGINAL_INSN(newarraykwsplat);
4718
4762
  END_INSN(trace_newarraykwsplat);
4719
4763
  }
@@ -4721,7 +4765,7 @@ INSN_ENTRY(trace_newarraykwsplat)
4721
4765
  /* insn trace_duparray(...)(...)(...) */
4722
4766
  INSN_ENTRY(trace_duparray)
4723
4767
  {
4724
- vm_trace(ec, GET_CFP(), GET_PC());
4768
+ vm_trace(ec, GET_CFP());
4725
4769
  DISPATCH_ORIGINAL_INSN(duparray);
4726
4770
  END_INSN(trace_duparray);
4727
4771
  }
@@ -4729,7 +4773,7 @@ INSN_ENTRY(trace_duparray)
4729
4773
  /* insn trace_duphash(...)(...)(...) */
4730
4774
  INSN_ENTRY(trace_duphash)
4731
4775
  {
4732
- vm_trace(ec, GET_CFP(), GET_PC());
4776
+ vm_trace(ec, GET_CFP());
4733
4777
  DISPATCH_ORIGINAL_INSN(duphash);
4734
4778
  END_INSN(trace_duphash);
4735
4779
  }
@@ -4737,7 +4781,7 @@ INSN_ENTRY(trace_duphash)
4737
4781
  /* insn trace_expandarray(...)(...)(...) */
4738
4782
  INSN_ENTRY(trace_expandarray)
4739
4783
  {
4740
- vm_trace(ec, GET_CFP(), GET_PC());
4784
+ vm_trace(ec, GET_CFP());
4741
4785
  DISPATCH_ORIGINAL_INSN(expandarray);
4742
4786
  END_INSN(trace_expandarray);
4743
4787
  }
@@ -4745,7 +4789,7 @@ INSN_ENTRY(trace_expandarray)
4745
4789
  /* insn trace_concatarray(...)(...)(...) */
4746
4790
  INSN_ENTRY(trace_concatarray)
4747
4791
  {
4748
- vm_trace(ec, GET_CFP(), GET_PC());
4792
+ vm_trace(ec, GET_CFP());
4749
4793
  DISPATCH_ORIGINAL_INSN(concatarray);
4750
4794
  END_INSN(trace_concatarray);
4751
4795
  }
@@ -4753,7 +4797,7 @@ INSN_ENTRY(trace_concatarray)
4753
4797
  /* insn trace_splatarray(...)(...)(...) */
4754
4798
  INSN_ENTRY(trace_splatarray)
4755
4799
  {
4756
- vm_trace(ec, GET_CFP(), GET_PC());
4800
+ vm_trace(ec, GET_CFP());
4757
4801
  DISPATCH_ORIGINAL_INSN(splatarray);
4758
4802
  END_INSN(trace_splatarray);
4759
4803
  }
@@ -4761,7 +4805,7 @@ INSN_ENTRY(trace_splatarray)
4761
4805
  /* insn trace_newhash(...)(...)(...) */
4762
4806
  INSN_ENTRY(trace_newhash)
4763
4807
  {
4764
- vm_trace(ec, GET_CFP(), GET_PC());
4808
+ vm_trace(ec, GET_CFP());
4765
4809
  DISPATCH_ORIGINAL_INSN(newhash);
4766
4810
  END_INSN(trace_newhash);
4767
4811
  }
@@ -4769,7 +4813,7 @@ INSN_ENTRY(trace_newhash)
4769
4813
  /* insn trace_newrange(...)(...)(...) */
4770
4814
  INSN_ENTRY(trace_newrange)
4771
4815
  {
4772
- vm_trace(ec, GET_CFP(), GET_PC());
4816
+ vm_trace(ec, GET_CFP());
4773
4817
  DISPATCH_ORIGINAL_INSN(newrange);
4774
4818
  END_INSN(trace_newrange);
4775
4819
  }
@@ -4777,7 +4821,7 @@ INSN_ENTRY(trace_newrange)
4777
4821
  /* insn trace_pop(...)(...)(...) */
4778
4822
  INSN_ENTRY(trace_pop)
4779
4823
  {
4780
- vm_trace(ec, GET_CFP(), GET_PC());
4824
+ vm_trace(ec, GET_CFP());
4781
4825
  DISPATCH_ORIGINAL_INSN(pop);
4782
4826
  END_INSN(trace_pop);
4783
4827
  }
@@ -4785,7 +4829,7 @@ INSN_ENTRY(trace_pop)
4785
4829
  /* insn trace_dup(...)(...)(...) */
4786
4830
  INSN_ENTRY(trace_dup)
4787
4831
  {
4788
- vm_trace(ec, GET_CFP(), GET_PC());
4832
+ vm_trace(ec, GET_CFP());
4789
4833
  DISPATCH_ORIGINAL_INSN(dup);
4790
4834
  END_INSN(trace_dup);
4791
4835
  }
@@ -4793,7 +4837,7 @@ INSN_ENTRY(trace_dup)
4793
4837
  /* insn trace_dupn(...)(...)(...) */
4794
4838
  INSN_ENTRY(trace_dupn)
4795
4839
  {
4796
- vm_trace(ec, GET_CFP(), GET_PC());
4840
+ vm_trace(ec, GET_CFP());
4797
4841
  DISPATCH_ORIGINAL_INSN(dupn);
4798
4842
  END_INSN(trace_dupn);
4799
4843
  }
@@ -4801,7 +4845,7 @@ INSN_ENTRY(trace_dupn)
4801
4845
  /* insn trace_swap(...)(...)(...) */
4802
4846
  INSN_ENTRY(trace_swap)
4803
4847
  {
4804
- vm_trace(ec, GET_CFP(), GET_PC());
4848
+ vm_trace(ec, GET_CFP());
4805
4849
  DISPATCH_ORIGINAL_INSN(swap);
4806
4850
  END_INSN(trace_swap);
4807
4851
  }
@@ -4809,7 +4853,7 @@ INSN_ENTRY(trace_swap)
4809
4853
  /* insn trace_reverse(...)(...)(...) */
4810
4854
  INSN_ENTRY(trace_reverse)
4811
4855
  {
4812
- vm_trace(ec, GET_CFP(), GET_PC());
4856
+ vm_trace(ec, GET_CFP());
4813
4857
  DISPATCH_ORIGINAL_INSN(reverse);
4814
4858
  END_INSN(trace_reverse);
4815
4859
  }
@@ -4817,7 +4861,7 @@ INSN_ENTRY(trace_reverse)
4817
4861
  /* insn trace_topn(...)(...)(...) */
4818
4862
  INSN_ENTRY(trace_topn)
4819
4863
  {
4820
- vm_trace(ec, GET_CFP(), GET_PC());
4864
+ vm_trace(ec, GET_CFP());
4821
4865
  DISPATCH_ORIGINAL_INSN(topn);
4822
4866
  END_INSN(trace_topn);
4823
4867
  }
@@ -4825,7 +4869,7 @@ INSN_ENTRY(trace_topn)
4825
4869
  /* insn trace_setn(...)(...)(...) */
4826
4870
  INSN_ENTRY(trace_setn)
4827
4871
  {
4828
- vm_trace(ec, GET_CFP(), GET_PC());
4872
+ vm_trace(ec, GET_CFP());
4829
4873
  DISPATCH_ORIGINAL_INSN(setn);
4830
4874
  END_INSN(trace_setn);
4831
4875
  }
@@ -4833,7 +4877,7 @@ INSN_ENTRY(trace_setn)
4833
4877
  /* insn trace_adjuststack(...)(...)(...) */
4834
4878
  INSN_ENTRY(trace_adjuststack)
4835
4879
  {
4836
- vm_trace(ec, GET_CFP(), GET_PC());
4880
+ vm_trace(ec, GET_CFP());
4837
4881
  DISPATCH_ORIGINAL_INSN(adjuststack);
4838
4882
  END_INSN(trace_adjuststack);
4839
4883
  }
@@ -4841,7 +4885,7 @@ INSN_ENTRY(trace_adjuststack)
4841
4885
  /* insn trace_defined(...)(...)(...) */
4842
4886
  INSN_ENTRY(trace_defined)
4843
4887
  {
4844
- vm_trace(ec, GET_CFP(), GET_PC());
4888
+ vm_trace(ec, GET_CFP());
4845
4889
  DISPATCH_ORIGINAL_INSN(defined);
4846
4890
  END_INSN(trace_defined);
4847
4891
  }
@@ -4849,7 +4893,7 @@ INSN_ENTRY(trace_defined)
4849
4893
  /* insn trace_checkmatch(...)(...)(...) */
4850
4894
  INSN_ENTRY(trace_checkmatch)
4851
4895
  {
4852
- vm_trace(ec, GET_CFP(), GET_PC());
4896
+ vm_trace(ec, GET_CFP());
4853
4897
  DISPATCH_ORIGINAL_INSN(checkmatch);
4854
4898
  END_INSN(trace_checkmatch);
4855
4899
  }
@@ -4857,7 +4901,7 @@ INSN_ENTRY(trace_checkmatch)
4857
4901
  /* insn trace_checkkeyword(...)(...)(...) */
4858
4902
  INSN_ENTRY(trace_checkkeyword)
4859
4903
  {
4860
- vm_trace(ec, GET_CFP(), GET_PC());
4904
+ vm_trace(ec, GET_CFP());
4861
4905
  DISPATCH_ORIGINAL_INSN(checkkeyword);
4862
4906
  END_INSN(trace_checkkeyword);
4863
4907
  }
@@ -4865,7 +4909,7 @@ INSN_ENTRY(trace_checkkeyword)
4865
4909
  /* insn trace_checktype(...)(...)(...) */
4866
4910
  INSN_ENTRY(trace_checktype)
4867
4911
  {
4868
- vm_trace(ec, GET_CFP(), GET_PC());
4912
+ vm_trace(ec, GET_CFP());
4869
4913
  DISPATCH_ORIGINAL_INSN(checktype);
4870
4914
  END_INSN(trace_checktype);
4871
4915
  }
@@ -4873,7 +4917,7 @@ INSN_ENTRY(trace_checktype)
4873
4917
  /* insn trace_defineclass(...)(...)(...) */
4874
4918
  INSN_ENTRY(trace_defineclass)
4875
4919
  {
4876
- vm_trace(ec, GET_CFP(), GET_PC());
4920
+ vm_trace(ec, GET_CFP());
4877
4921
  DISPATCH_ORIGINAL_INSN(defineclass);
4878
4922
  END_INSN(trace_defineclass);
4879
4923
  }
@@ -4881,7 +4925,7 @@ INSN_ENTRY(trace_defineclass)
4881
4925
  /* insn trace_definemethod(...)(...)(...) */
4882
4926
  INSN_ENTRY(trace_definemethod)
4883
4927
  {
4884
- vm_trace(ec, GET_CFP(), GET_PC());
4928
+ vm_trace(ec, GET_CFP());
4885
4929
  DISPATCH_ORIGINAL_INSN(definemethod);
4886
4930
  END_INSN(trace_definemethod);
4887
4931
  }
@@ -4889,7 +4933,7 @@ INSN_ENTRY(trace_definemethod)
4889
4933
  /* insn trace_definesmethod(...)(...)(...) */
4890
4934
  INSN_ENTRY(trace_definesmethod)
4891
4935
  {
4892
- vm_trace(ec, GET_CFP(), GET_PC());
4936
+ vm_trace(ec, GET_CFP());
4893
4937
  DISPATCH_ORIGINAL_INSN(definesmethod);
4894
4938
  END_INSN(trace_definesmethod);
4895
4939
  }
@@ -4897,7 +4941,7 @@ INSN_ENTRY(trace_definesmethod)
4897
4941
  /* insn trace_send(...)(...)(...) */
4898
4942
  INSN_ENTRY(trace_send)
4899
4943
  {
4900
- vm_trace(ec, GET_CFP(), GET_PC());
4944
+ vm_trace(ec, GET_CFP());
4901
4945
  DISPATCH_ORIGINAL_INSN(send);
4902
4946
  END_INSN(trace_send);
4903
4947
  }
@@ -4905,7 +4949,7 @@ INSN_ENTRY(trace_send)
4905
4949
  /* insn trace_opt_send_without_block(...)(...)(...) */
4906
4950
  INSN_ENTRY(trace_opt_send_without_block)
4907
4951
  {
4908
- vm_trace(ec, GET_CFP(), GET_PC());
4952
+ vm_trace(ec, GET_CFP());
4909
4953
  DISPATCH_ORIGINAL_INSN(opt_send_without_block);
4910
4954
  END_INSN(trace_opt_send_without_block);
4911
4955
  }
@@ -4913,7 +4957,7 @@ INSN_ENTRY(trace_opt_send_without_block)
4913
4957
  /* insn trace_opt_str_freeze(...)(...)(...) */
4914
4958
  INSN_ENTRY(trace_opt_str_freeze)
4915
4959
  {
4916
- vm_trace(ec, GET_CFP(), GET_PC());
4960
+ vm_trace(ec, GET_CFP());
4917
4961
  DISPATCH_ORIGINAL_INSN(opt_str_freeze);
4918
4962
  END_INSN(trace_opt_str_freeze);
4919
4963
  }
@@ -4921,7 +4965,7 @@ INSN_ENTRY(trace_opt_str_freeze)
4921
4965
  /* insn trace_opt_nil_p(...)(...)(...) */
4922
4966
  INSN_ENTRY(trace_opt_nil_p)
4923
4967
  {
4924
- vm_trace(ec, GET_CFP(), GET_PC());
4968
+ vm_trace(ec, GET_CFP());
4925
4969
  DISPATCH_ORIGINAL_INSN(opt_nil_p);
4926
4970
  END_INSN(trace_opt_nil_p);
4927
4971
  }
@@ -4929,7 +4973,7 @@ INSN_ENTRY(trace_opt_nil_p)
4929
4973
  /* insn trace_opt_str_uminus(...)(...)(...) */
4930
4974
  INSN_ENTRY(trace_opt_str_uminus)
4931
4975
  {
4932
- vm_trace(ec, GET_CFP(), GET_PC());
4976
+ vm_trace(ec, GET_CFP());
4933
4977
  DISPATCH_ORIGINAL_INSN(opt_str_uminus);
4934
4978
  END_INSN(trace_opt_str_uminus);
4935
4979
  }
@@ -4937,7 +4981,7 @@ INSN_ENTRY(trace_opt_str_uminus)
4937
4981
  /* insn trace_opt_newarray_max(...)(...)(...) */
4938
4982
  INSN_ENTRY(trace_opt_newarray_max)
4939
4983
  {
4940
- vm_trace(ec, GET_CFP(), GET_PC());
4984
+ vm_trace(ec, GET_CFP());
4941
4985
  DISPATCH_ORIGINAL_INSN(opt_newarray_max);
4942
4986
  END_INSN(trace_opt_newarray_max);
4943
4987
  }
@@ -4945,7 +4989,7 @@ INSN_ENTRY(trace_opt_newarray_max)
4945
4989
  /* insn trace_opt_newarray_min(...)(...)(...) */
4946
4990
  INSN_ENTRY(trace_opt_newarray_min)
4947
4991
  {
4948
- vm_trace(ec, GET_CFP(), GET_PC());
4992
+ vm_trace(ec, GET_CFP());
4949
4993
  DISPATCH_ORIGINAL_INSN(opt_newarray_min);
4950
4994
  END_INSN(trace_opt_newarray_min);
4951
4995
  }
@@ -4953,7 +4997,7 @@ INSN_ENTRY(trace_opt_newarray_min)
4953
4997
  /* insn trace_invokesuper(...)(...)(...) */
4954
4998
  INSN_ENTRY(trace_invokesuper)
4955
4999
  {
4956
- vm_trace(ec, GET_CFP(), GET_PC());
5000
+ vm_trace(ec, GET_CFP());
4957
5001
  DISPATCH_ORIGINAL_INSN(invokesuper);
4958
5002
  END_INSN(trace_invokesuper);
4959
5003
  }
@@ -4961,7 +5005,7 @@ INSN_ENTRY(trace_invokesuper)
4961
5005
  /* insn trace_invokeblock(...)(...)(...) */
4962
5006
  INSN_ENTRY(trace_invokeblock)
4963
5007
  {
4964
- vm_trace(ec, GET_CFP(), GET_PC());
5008
+ vm_trace(ec, GET_CFP());
4965
5009
  DISPATCH_ORIGINAL_INSN(invokeblock);
4966
5010
  END_INSN(trace_invokeblock);
4967
5011
  }
@@ -4969,7 +5013,7 @@ INSN_ENTRY(trace_invokeblock)
4969
5013
  /* insn trace_leave(...)(...)(...) */
4970
5014
  INSN_ENTRY(trace_leave)
4971
5015
  {
4972
- vm_trace(ec, GET_CFP(), GET_PC());
5016
+ vm_trace(ec, GET_CFP());
4973
5017
  DISPATCH_ORIGINAL_INSN(leave);
4974
5018
  END_INSN(trace_leave);
4975
5019
  }
@@ -4977,7 +5021,7 @@ INSN_ENTRY(trace_leave)
4977
5021
  /* insn trace_throw(...)(...)(...) */
4978
5022
  INSN_ENTRY(trace_throw)
4979
5023
  {
4980
- vm_trace(ec, GET_CFP(), GET_PC());
5024
+ vm_trace(ec, GET_CFP());
4981
5025
  DISPATCH_ORIGINAL_INSN(throw);
4982
5026
  END_INSN(trace_throw);
4983
5027
  }
@@ -4985,7 +5029,7 @@ INSN_ENTRY(trace_throw)
4985
5029
  /* insn trace_jump(...)(...)(...) */
4986
5030
  INSN_ENTRY(trace_jump)
4987
5031
  {
4988
- vm_trace(ec, GET_CFP(), GET_PC());
5032
+ vm_trace(ec, GET_CFP());
4989
5033
  DISPATCH_ORIGINAL_INSN(jump);
4990
5034
  END_INSN(trace_jump);
4991
5035
  }
@@ -4993,7 +5037,7 @@ INSN_ENTRY(trace_jump)
4993
5037
  /* insn trace_branchif(...)(...)(...) */
4994
5038
  INSN_ENTRY(trace_branchif)
4995
5039
  {
4996
- vm_trace(ec, GET_CFP(), GET_PC());
5040
+ vm_trace(ec, GET_CFP());
4997
5041
  DISPATCH_ORIGINAL_INSN(branchif);
4998
5042
  END_INSN(trace_branchif);
4999
5043
  }
@@ -5001,7 +5045,7 @@ INSN_ENTRY(trace_branchif)
5001
5045
  /* insn trace_branchunless(...)(...)(...) */
5002
5046
  INSN_ENTRY(trace_branchunless)
5003
5047
  {
5004
- vm_trace(ec, GET_CFP(), GET_PC());
5048
+ vm_trace(ec, GET_CFP());
5005
5049
  DISPATCH_ORIGINAL_INSN(branchunless);
5006
5050
  END_INSN(trace_branchunless);
5007
5051
  }
@@ -5009,7 +5053,7 @@ INSN_ENTRY(trace_branchunless)
5009
5053
  /* insn trace_branchnil(...)(...)(...) */
5010
5054
  INSN_ENTRY(trace_branchnil)
5011
5055
  {
5012
- vm_trace(ec, GET_CFP(), GET_PC());
5056
+ vm_trace(ec, GET_CFP());
5013
5057
  DISPATCH_ORIGINAL_INSN(branchnil);
5014
5058
  END_INSN(trace_branchnil);
5015
5059
  }
@@ -5017,7 +5061,7 @@ INSN_ENTRY(trace_branchnil)
5017
5061
  /* insn trace_opt_getinlinecache(...)(...)(...) */
5018
5062
  INSN_ENTRY(trace_opt_getinlinecache)
5019
5063
  {
5020
- vm_trace(ec, GET_CFP(), GET_PC());
5064
+ vm_trace(ec, GET_CFP());
5021
5065
  DISPATCH_ORIGINAL_INSN(opt_getinlinecache);
5022
5066
  END_INSN(trace_opt_getinlinecache);
5023
5067
  }
@@ -5025,7 +5069,7 @@ INSN_ENTRY(trace_opt_getinlinecache)
5025
5069
  /* insn trace_opt_setinlinecache(...)(...)(...) */
5026
5070
  INSN_ENTRY(trace_opt_setinlinecache)
5027
5071
  {
5028
- vm_trace(ec, GET_CFP(), GET_PC());
5072
+ vm_trace(ec, GET_CFP());
5029
5073
  DISPATCH_ORIGINAL_INSN(opt_setinlinecache);
5030
5074
  END_INSN(trace_opt_setinlinecache);
5031
5075
  }
@@ -5033,7 +5077,7 @@ INSN_ENTRY(trace_opt_setinlinecache)
5033
5077
  /* insn trace_once(...)(...)(...) */
5034
5078
  INSN_ENTRY(trace_once)
5035
5079
  {
5036
- vm_trace(ec, GET_CFP(), GET_PC());
5080
+ vm_trace(ec, GET_CFP());
5037
5081
  DISPATCH_ORIGINAL_INSN(once);
5038
5082
  END_INSN(trace_once);
5039
5083
  }
@@ -5041,7 +5085,7 @@ INSN_ENTRY(trace_once)
5041
5085
  /* insn trace_opt_case_dispatch(...)(...)(...) */
5042
5086
  INSN_ENTRY(trace_opt_case_dispatch)
5043
5087
  {
5044
- vm_trace(ec, GET_CFP(), GET_PC());
5088
+ vm_trace(ec, GET_CFP());
5045
5089
  DISPATCH_ORIGINAL_INSN(opt_case_dispatch);
5046
5090
  END_INSN(trace_opt_case_dispatch);
5047
5091
  }
@@ -5049,7 +5093,7 @@ INSN_ENTRY(trace_opt_case_dispatch)
5049
5093
  /* insn trace_opt_plus(...)(...)(...) */
5050
5094
  INSN_ENTRY(trace_opt_plus)
5051
5095
  {
5052
- vm_trace(ec, GET_CFP(), GET_PC());
5096
+ vm_trace(ec, GET_CFP());
5053
5097
  DISPATCH_ORIGINAL_INSN(opt_plus);
5054
5098
  END_INSN(trace_opt_plus);
5055
5099
  }
@@ -5057,7 +5101,7 @@ INSN_ENTRY(trace_opt_plus)
5057
5101
  /* insn trace_opt_minus(...)(...)(...) */
5058
5102
  INSN_ENTRY(trace_opt_minus)
5059
5103
  {
5060
- vm_trace(ec, GET_CFP(), GET_PC());
5104
+ vm_trace(ec, GET_CFP());
5061
5105
  DISPATCH_ORIGINAL_INSN(opt_minus);
5062
5106
  END_INSN(trace_opt_minus);
5063
5107
  }
@@ -5065,7 +5109,7 @@ INSN_ENTRY(trace_opt_minus)
5065
5109
  /* insn trace_opt_mult(...)(...)(...) */
5066
5110
  INSN_ENTRY(trace_opt_mult)
5067
5111
  {
5068
- vm_trace(ec, GET_CFP(), GET_PC());
5112
+ vm_trace(ec, GET_CFP());
5069
5113
  DISPATCH_ORIGINAL_INSN(opt_mult);
5070
5114
  END_INSN(trace_opt_mult);
5071
5115
  }
@@ -5073,7 +5117,7 @@ INSN_ENTRY(trace_opt_mult)
5073
5117
  /* insn trace_opt_div(...)(...)(...) */
5074
5118
  INSN_ENTRY(trace_opt_div)
5075
5119
  {
5076
- vm_trace(ec, GET_CFP(), GET_PC());
5120
+ vm_trace(ec, GET_CFP());
5077
5121
  DISPATCH_ORIGINAL_INSN(opt_div);
5078
5122
  END_INSN(trace_opt_div);
5079
5123
  }
@@ -5081,7 +5125,7 @@ INSN_ENTRY(trace_opt_div)
5081
5125
  /* insn trace_opt_mod(...)(...)(...) */
5082
5126
  INSN_ENTRY(trace_opt_mod)
5083
5127
  {
5084
- vm_trace(ec, GET_CFP(), GET_PC());
5128
+ vm_trace(ec, GET_CFP());
5085
5129
  DISPATCH_ORIGINAL_INSN(opt_mod);
5086
5130
  END_INSN(trace_opt_mod);
5087
5131
  }
@@ -5089,7 +5133,7 @@ INSN_ENTRY(trace_opt_mod)
5089
5133
  /* insn trace_opt_eq(...)(...)(...) */
5090
5134
  INSN_ENTRY(trace_opt_eq)
5091
5135
  {
5092
- vm_trace(ec, GET_CFP(), GET_PC());
5136
+ vm_trace(ec, GET_CFP());
5093
5137
  DISPATCH_ORIGINAL_INSN(opt_eq);
5094
5138
  END_INSN(trace_opt_eq);
5095
5139
  }
@@ -5097,7 +5141,7 @@ INSN_ENTRY(trace_opt_eq)
5097
5141
  /* insn trace_opt_neq(...)(...)(...) */
5098
5142
  INSN_ENTRY(trace_opt_neq)
5099
5143
  {
5100
- vm_trace(ec, GET_CFP(), GET_PC());
5144
+ vm_trace(ec, GET_CFP());
5101
5145
  DISPATCH_ORIGINAL_INSN(opt_neq);
5102
5146
  END_INSN(trace_opt_neq);
5103
5147
  }
@@ -5105,7 +5149,7 @@ INSN_ENTRY(trace_opt_neq)
5105
5149
  /* insn trace_opt_lt(...)(...)(...) */
5106
5150
  INSN_ENTRY(trace_opt_lt)
5107
5151
  {
5108
- vm_trace(ec, GET_CFP(), GET_PC());
5152
+ vm_trace(ec, GET_CFP());
5109
5153
  DISPATCH_ORIGINAL_INSN(opt_lt);
5110
5154
  END_INSN(trace_opt_lt);
5111
5155
  }
@@ -5113,7 +5157,7 @@ INSN_ENTRY(trace_opt_lt)
5113
5157
  /* insn trace_opt_le(...)(...)(...) */
5114
5158
  INSN_ENTRY(trace_opt_le)
5115
5159
  {
5116
- vm_trace(ec, GET_CFP(), GET_PC());
5160
+ vm_trace(ec, GET_CFP());
5117
5161
  DISPATCH_ORIGINAL_INSN(opt_le);
5118
5162
  END_INSN(trace_opt_le);
5119
5163
  }
@@ -5121,7 +5165,7 @@ INSN_ENTRY(trace_opt_le)
5121
5165
  /* insn trace_opt_gt(...)(...)(...) */
5122
5166
  INSN_ENTRY(trace_opt_gt)
5123
5167
  {
5124
- vm_trace(ec, GET_CFP(), GET_PC());
5168
+ vm_trace(ec, GET_CFP());
5125
5169
  DISPATCH_ORIGINAL_INSN(opt_gt);
5126
5170
  END_INSN(trace_opt_gt);
5127
5171
  }
@@ -5129,7 +5173,7 @@ INSN_ENTRY(trace_opt_gt)
5129
5173
  /* insn trace_opt_ge(...)(...)(...) */
5130
5174
  INSN_ENTRY(trace_opt_ge)
5131
5175
  {
5132
- vm_trace(ec, GET_CFP(), GET_PC());
5176
+ vm_trace(ec, GET_CFP());
5133
5177
  DISPATCH_ORIGINAL_INSN(opt_ge);
5134
5178
  END_INSN(trace_opt_ge);
5135
5179
  }
@@ -5137,7 +5181,7 @@ INSN_ENTRY(trace_opt_ge)
5137
5181
  /* insn trace_opt_ltlt(...)(...)(...) */
5138
5182
  INSN_ENTRY(trace_opt_ltlt)
5139
5183
  {
5140
- vm_trace(ec, GET_CFP(), GET_PC());
5184
+ vm_trace(ec, GET_CFP());
5141
5185
  DISPATCH_ORIGINAL_INSN(opt_ltlt);
5142
5186
  END_INSN(trace_opt_ltlt);
5143
5187
  }
@@ -5145,7 +5189,7 @@ INSN_ENTRY(trace_opt_ltlt)
5145
5189
  /* insn trace_opt_and(...)(...)(...) */
5146
5190
  INSN_ENTRY(trace_opt_and)
5147
5191
  {
5148
- vm_trace(ec, GET_CFP(), GET_PC());
5192
+ vm_trace(ec, GET_CFP());
5149
5193
  DISPATCH_ORIGINAL_INSN(opt_and);
5150
5194
  END_INSN(trace_opt_and);
5151
5195
  }
@@ -5153,7 +5197,7 @@ INSN_ENTRY(trace_opt_and)
5153
5197
  /* insn trace_opt_or(...)(...)(...) */
5154
5198
  INSN_ENTRY(trace_opt_or)
5155
5199
  {
5156
- vm_trace(ec, GET_CFP(), GET_PC());
5200
+ vm_trace(ec, GET_CFP());
5157
5201
  DISPATCH_ORIGINAL_INSN(opt_or);
5158
5202
  END_INSN(trace_opt_or);
5159
5203
  }
@@ -5161,7 +5205,7 @@ INSN_ENTRY(trace_opt_or)
5161
5205
  /* insn trace_opt_aref(...)(...)(...) */
5162
5206
  INSN_ENTRY(trace_opt_aref)
5163
5207
  {
5164
- vm_trace(ec, GET_CFP(), GET_PC());
5208
+ vm_trace(ec, GET_CFP());
5165
5209
  DISPATCH_ORIGINAL_INSN(opt_aref);
5166
5210
  END_INSN(trace_opt_aref);
5167
5211
  }
@@ -5169,7 +5213,7 @@ INSN_ENTRY(trace_opt_aref)
5169
5213
  /* insn trace_opt_aset(...)(...)(...) */
5170
5214
  INSN_ENTRY(trace_opt_aset)
5171
5215
  {
5172
- vm_trace(ec, GET_CFP(), GET_PC());
5216
+ vm_trace(ec, GET_CFP());
5173
5217
  DISPATCH_ORIGINAL_INSN(opt_aset);
5174
5218
  END_INSN(trace_opt_aset);
5175
5219
  }
@@ -5177,7 +5221,7 @@ INSN_ENTRY(trace_opt_aset)
5177
5221
  /* insn trace_opt_aset_with(...)(...)(...) */
5178
5222
  INSN_ENTRY(trace_opt_aset_with)
5179
5223
  {
5180
- vm_trace(ec, GET_CFP(), GET_PC());
5224
+ vm_trace(ec, GET_CFP());
5181
5225
  DISPATCH_ORIGINAL_INSN(opt_aset_with);
5182
5226
  END_INSN(trace_opt_aset_with);
5183
5227
  }
@@ -5185,7 +5229,7 @@ INSN_ENTRY(trace_opt_aset_with)
5185
5229
  /* insn trace_opt_aref_with(...)(...)(...) */
5186
5230
  INSN_ENTRY(trace_opt_aref_with)
5187
5231
  {
5188
- vm_trace(ec, GET_CFP(), GET_PC());
5232
+ vm_trace(ec, GET_CFP());
5189
5233
  DISPATCH_ORIGINAL_INSN(opt_aref_with);
5190
5234
  END_INSN(trace_opt_aref_with);
5191
5235
  }
@@ -5193,7 +5237,7 @@ INSN_ENTRY(trace_opt_aref_with)
5193
5237
  /* insn trace_opt_length(...)(...)(...) */
5194
5238
  INSN_ENTRY(trace_opt_length)
5195
5239
  {
5196
- vm_trace(ec, GET_CFP(), GET_PC());
5240
+ vm_trace(ec, GET_CFP());
5197
5241
  DISPATCH_ORIGINAL_INSN(opt_length);
5198
5242
  END_INSN(trace_opt_length);
5199
5243
  }
@@ -5201,7 +5245,7 @@ INSN_ENTRY(trace_opt_length)
5201
5245
  /* insn trace_opt_size(...)(...)(...) */
5202
5246
  INSN_ENTRY(trace_opt_size)
5203
5247
  {
5204
- vm_trace(ec, GET_CFP(), GET_PC());
5248
+ vm_trace(ec, GET_CFP());
5205
5249
  DISPATCH_ORIGINAL_INSN(opt_size);
5206
5250
  END_INSN(trace_opt_size);
5207
5251
  }
@@ -5209,7 +5253,7 @@ INSN_ENTRY(trace_opt_size)
5209
5253
  /* insn trace_opt_empty_p(...)(...)(...) */
5210
5254
  INSN_ENTRY(trace_opt_empty_p)
5211
5255
  {
5212
- vm_trace(ec, GET_CFP(), GET_PC());
5256
+ vm_trace(ec, GET_CFP());
5213
5257
  DISPATCH_ORIGINAL_INSN(opt_empty_p);
5214
5258
  END_INSN(trace_opt_empty_p);
5215
5259
  }
@@ -5217,7 +5261,7 @@ INSN_ENTRY(trace_opt_empty_p)
5217
5261
  /* insn trace_opt_succ(...)(...)(...) */
5218
5262
  INSN_ENTRY(trace_opt_succ)
5219
5263
  {
5220
- vm_trace(ec, GET_CFP(), GET_PC());
5264
+ vm_trace(ec, GET_CFP());
5221
5265
  DISPATCH_ORIGINAL_INSN(opt_succ);
5222
5266
  END_INSN(trace_opt_succ);
5223
5267
  }
@@ -5225,7 +5269,7 @@ INSN_ENTRY(trace_opt_succ)
5225
5269
  /* insn trace_opt_not(...)(...)(...) */
5226
5270
  INSN_ENTRY(trace_opt_not)
5227
5271
  {
5228
- vm_trace(ec, GET_CFP(), GET_PC());
5272
+ vm_trace(ec, GET_CFP());
5229
5273
  DISPATCH_ORIGINAL_INSN(opt_not);
5230
5274
  END_INSN(trace_opt_not);
5231
5275
  }
@@ -5233,23 +5277,15 @@ INSN_ENTRY(trace_opt_not)
5233
5277
  /* insn trace_opt_regexpmatch2(...)(...)(...) */
5234
5278
  INSN_ENTRY(trace_opt_regexpmatch2)
5235
5279
  {
5236
- vm_trace(ec, GET_CFP(), GET_PC());
5280
+ vm_trace(ec, GET_CFP());
5237
5281
  DISPATCH_ORIGINAL_INSN(opt_regexpmatch2);
5238
5282
  END_INSN(trace_opt_regexpmatch2);
5239
5283
  }
5240
5284
 
5241
- /* insn trace_opt_call_c_function(...)(...)(...) */
5242
- INSN_ENTRY(trace_opt_call_c_function)
5243
- {
5244
- vm_trace(ec, GET_CFP(), GET_PC());
5245
- DISPATCH_ORIGINAL_INSN(opt_call_c_function);
5246
- END_INSN(trace_opt_call_c_function);
5247
- }
5248
-
5249
5285
  /* insn trace_invokebuiltin(...)(...)(...) */
5250
5286
  INSN_ENTRY(trace_invokebuiltin)
5251
5287
  {
5252
- vm_trace(ec, GET_CFP(), GET_PC());
5288
+ vm_trace(ec, GET_CFP());
5253
5289
  DISPATCH_ORIGINAL_INSN(invokebuiltin);
5254
5290
  END_INSN(trace_invokebuiltin);
5255
5291
  }
@@ -5257,7 +5293,7 @@ INSN_ENTRY(trace_invokebuiltin)
5257
5293
  /* insn trace_opt_invokebuiltin_delegate(...)(...)(...) */
5258
5294
  INSN_ENTRY(trace_opt_invokebuiltin_delegate)
5259
5295
  {
5260
- vm_trace(ec, GET_CFP(), GET_PC());
5296
+ vm_trace(ec, GET_CFP());
5261
5297
  DISPATCH_ORIGINAL_INSN(opt_invokebuiltin_delegate);
5262
5298
  END_INSN(trace_opt_invokebuiltin_delegate);
5263
5299
  }
@@ -5265,7 +5301,7 @@ INSN_ENTRY(trace_opt_invokebuiltin_delegate)
5265
5301
  /* insn trace_opt_invokebuiltin_delegate_leave(...)(...)(...) */
5266
5302
  INSN_ENTRY(trace_opt_invokebuiltin_delegate_leave)
5267
5303
  {
5268
- vm_trace(ec, GET_CFP(), GET_PC());
5304
+ vm_trace(ec, GET_CFP());
5269
5305
  DISPATCH_ORIGINAL_INSN(opt_invokebuiltin_delegate_leave);
5270
5306
  END_INSN(trace_opt_invokebuiltin_delegate_leave);
5271
5307
  }
@@ -5273,7 +5309,7 @@ INSN_ENTRY(trace_opt_invokebuiltin_delegate_leave)
5273
5309
  /* insn trace_getlocal_WC_0(...)(...)(...) */
5274
5310
  INSN_ENTRY(trace_getlocal_WC_0)
5275
5311
  {
5276
- vm_trace(ec, GET_CFP(), GET_PC());
5312
+ vm_trace(ec, GET_CFP());
5277
5313
  DISPATCH_ORIGINAL_INSN(getlocal_WC_0);
5278
5314
  END_INSN(trace_getlocal_WC_0);
5279
5315
  }
@@ -5281,7 +5317,7 @@ INSN_ENTRY(trace_getlocal_WC_0)
5281
5317
  /* insn trace_getlocal_WC_1(...)(...)(...) */
5282
5318
  INSN_ENTRY(trace_getlocal_WC_1)
5283
5319
  {
5284
- vm_trace(ec, GET_CFP(), GET_PC());
5320
+ vm_trace(ec, GET_CFP());
5285
5321
  DISPATCH_ORIGINAL_INSN(getlocal_WC_1);
5286
5322
  END_INSN(trace_getlocal_WC_1);
5287
5323
  }
@@ -5289,7 +5325,7 @@ INSN_ENTRY(trace_getlocal_WC_1)
5289
5325
  /* insn trace_setlocal_WC_0(...)(...)(...) */
5290
5326
  INSN_ENTRY(trace_setlocal_WC_0)
5291
5327
  {
5292
- vm_trace(ec, GET_CFP(), GET_PC());
5328
+ vm_trace(ec, GET_CFP());
5293
5329
  DISPATCH_ORIGINAL_INSN(setlocal_WC_0);
5294
5330
  END_INSN(trace_setlocal_WC_0);
5295
5331
  }
@@ -5297,7 +5333,7 @@ INSN_ENTRY(trace_setlocal_WC_0)
5297
5333
  /* insn trace_setlocal_WC_1(...)(...)(...) */
5298
5334
  INSN_ENTRY(trace_setlocal_WC_1)
5299
5335
  {
5300
- vm_trace(ec, GET_CFP(), GET_PC());
5336
+ vm_trace(ec, GET_CFP());
5301
5337
  DISPATCH_ORIGINAL_INSN(setlocal_WC_1);
5302
5338
  END_INSN(trace_setlocal_WC_1);
5303
5339
  }
@@ -5305,7 +5341,7 @@ INSN_ENTRY(trace_setlocal_WC_1)
5305
5341
  /* insn trace_putobject_INT2FIX_0_(...)(...)(...) */
5306
5342
  INSN_ENTRY(trace_putobject_INT2FIX_0_)
5307
5343
  {
5308
- vm_trace(ec, GET_CFP(), GET_PC());
5344
+ vm_trace(ec, GET_CFP());
5309
5345
  DISPATCH_ORIGINAL_INSN(putobject_INT2FIX_0_);
5310
5346
  END_INSN(trace_putobject_INT2FIX_0_);
5311
5347
  }
@@ -5313,7 +5349,7 @@ INSN_ENTRY(trace_putobject_INT2FIX_0_)
5313
5349
  /* insn trace_putobject_INT2FIX_1_(...)(...)(...) */
5314
5350
  INSN_ENTRY(trace_putobject_INT2FIX_1_)
5315
5351
  {
5316
- vm_trace(ec, GET_CFP(), GET_PC());
5352
+ vm_trace(ec, GET_CFP());
5317
5353
  DISPATCH_ORIGINAL_INSN(putobject_INT2FIX_1_);
5318
5354
  END_INSN(trace_putobject_INT2FIX_1_);
5319
5355
  }