debase-ruby_core_source 0.10.9 → 0.10.13

Sign up to get free protection for your applications and to get access to all the features.
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
  }