rubyduino 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1628) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +1 -0
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +1 -2
  5. data/examples/hc_sr04.rb +39 -0
  6. data/lib/rubyduino/arduino_uno.rb +76 -0
  7. data/lib/rubyduino/sp_runtime.h +287 -0
  8. data/lib/rubyduino/spinel.rb +1 -1
  9. data/lib/rubyduino/spinel_arduino_codegen.rb +53 -13
  10. data/lib/rubyduino/version.rb +1 -1
  11. data/vendor/spinel/Makefile +463 -54
  12. data/vendor/spinel/README.md +248 -68
  13. data/vendor/spinel/benchmark/bm_jekyll_lite.rb +241 -0
  14. data/vendor/spinel/benchmark/bm_micro_lisp.rb +282 -0
  15. data/vendor/spinel/benchmark/bm_poly_cells.rb +75 -0
  16. data/vendor/spinel/benchmark/bm_range_each.rb +15 -0
  17. data/vendor/spinel/benchmark/bm_sinatra_mini.rb +126 -0
  18. data/vendor/spinel/compiler_helpers.rb +1506 -0
  19. data/vendor/spinel/docs/ANALYZE-IR.md +411 -0
  20. data/vendor/spinel/docs/AST.md +360 -0
  21. data/vendor/spinel/docs/CLASS-OBJECT.md +521 -0
  22. data/vendor/spinel/docs/FFI.md +9 -0
  23. data/vendor/spinel/docs/FLOAT-ROUNDING.md +47 -0
  24. data/vendor/spinel/docs/HASH-NULLABLE.md +379 -0
  25. data/vendor/spinel/docs/INCOMPATIBILITIES.md +102 -0
  26. data/vendor/spinel/docs/RBS-EXTRACT.md +128 -0
  27. data/vendor/spinel/docs/fast-bootstrap.md +74 -0
  28. data/vendor/spinel/docs/issue-646-plan.md +159 -0
  29. data/vendor/spinel/docs/promote-mode-plan.md +227 -0
  30. data/vendor/spinel/docs/setbyte-semantic-plan.md +203 -0
  31. data/vendor/spinel/examples/ffi/sqlite/README.md +7 -6
  32. data/vendor/spinel/examples/ffi/sqlite/sqlite3_lib.rb +7 -4
  33. data/vendor/spinel/experiments/rbs/box.rb +32 -0
  34. data/vendor/spinel/experiments/rbs/box.seed +18 -0
  35. data/vendor/spinel/experiments/rbs/harness.rb +117 -0
  36. data/vendor/spinel/lib/regexp/re_compile.c +265 -25
  37. data/vendor/spinel/lib/regexp/re_exec.c +80 -19
  38. data/vendor/spinel/lib/regexp/re_internal.h +22 -2
  39. data/vendor/spinel/lib/regexp/re_utf8.c +21 -2
  40. data/vendor/spinel/lib/sp_bigint.c +67 -3
  41. data/vendor/spinel/lib/sp_core.c +248 -0
  42. data/vendor/spinel/lib/sp_core.h +37 -0
  43. data/vendor/spinel/lib/sp_crypto.c +583 -0
  44. data/vendor/spinel/lib/sp_crypto.h +79 -0
  45. data/vendor/spinel/lib/sp_fiber.c +95 -0
  46. data/vendor/spinel/lib/sp_fiber.h +41 -0
  47. data/vendor/spinel/lib/sp_gc.c +89 -0
  48. data/vendor/spinel/lib/sp_gc.h +81 -0
  49. data/vendor/spinel/lib/sp_io.c +98 -0
  50. data/vendor/spinel/lib/sp_io.h +31 -0
  51. data/vendor/spinel/lib/sp_net.c +350 -0
  52. data/vendor/spinel/lib/sp_net.h +97 -0
  53. data/vendor/spinel/lib/sp_pack.c +431 -0
  54. data/vendor/spinel/lib/sp_runtime.h +3485 -341
  55. data/vendor/spinel/lib/sp_strscan.c +320 -0
  56. data/vendor/spinel/lib/sp_system.c +173 -0
  57. data/vendor/spinel/lib/sp_system.h +16 -0
  58. data/vendor/spinel/lib/sp_time.c +204 -0
  59. data/vendor/spinel/lib/sp_time.h +63 -0
  60. data/vendor/spinel/lib/sp_types.h +144 -0
  61. data/vendor/spinel/lib/stringio.c +31 -3
  62. data/vendor/spinel/lib/strscan.c +34 -7
  63. data/vendor/spinel/lib/strscan.rb +6 -53
  64. data/vendor/spinel/node_table_loader.rb +150 -0
  65. data/vendor/spinel/spinel +319 -21
  66. data/vendor/spinel/spinel_analyze.rb +37556 -0
  67. data/vendor/spinel/spinel_codegen.rb +47620 -33346
  68. data/vendor/spinel/spinel_parse +0 -0
  69. data/vendor/spinel/spinel_parse.c +801 -91
  70. data/vendor/spinel/spinel_rbs_extract.c +931 -0
  71. data/vendor/spinel/test/alias_attr_reader_source.rb +38 -0
  72. data/vendor/spinel/test/alias_attr_reader_source.rb.expected +7 -0
  73. data/vendor/spinel/test/alias_inherited_method.rb +20 -0
  74. data/vendor/spinel/test/alias_inherited_method.rb.expected +3 -0
  75. data/vendor/spinel/test/alias_method_dispatch.rb +14 -0
  76. data/vendor/spinel/test/analyze_fail/attributes_non_symbol.rb +3 -0
  77. data/vendor/spinel/test/analyze_fail/attributes_non_symbol.stderr.expected +1 -0
  78. data/vendor/spinel/test/analyze_fail/dynamic_define_method.rb +4 -0
  79. data/vendor/spinel/test/analyze_fail/dynamic_define_method.stderr.expected +1 -0
  80. data/vendor/spinel/test/analyze_fail/instance_exec_def_in_block.rb +14 -0
  81. data/vendor/spinel/test/analyze_fail/instance_exec_def_in_block.stderr.expected +1 -0
  82. data/vendor/spinel/test/analyze_fail/instance_exec_define_method.rb +15 -0
  83. data/vendor/spinel/test/analyze_fail/instance_exec_define_method.stderr.expected +1 -0
  84. data/vendor/spinel/test/analyze_fail/instance_exec_no_block.rb +13 -0
  85. data/vendor/spinel/test/analyze_fail/instance_exec_no_block.stderr.expected +1 -0
  86. data/vendor/spinel/test/analyze_fail/nonliteral_define_method_each.rb +7 -0
  87. data/vendor/spinel/test/analyze_fail/nonliteral_define_method_each.stderr.expected +1 -0
  88. data/vendor/spinel/test/argv_gc.rb +45 -0
  89. data/vendor/spinel/test/argv_gc.rb.args +1 -0
  90. data/vendor/spinel/test/argv_gc.rb.expected +6 -0
  91. data/vendor/spinel/test/array_at_out_of_bounds.rb +23 -0
  92. data/vendor/spinel/test/array_at_out_of_bounds.rb.expected +12 -0
  93. data/vendor/spinel/test/array_clear_expr.rb +26 -0
  94. data/vendor/spinel/test/array_clear_expr.rb.expected +10 -0
  95. data/vendor/spinel/test/array_combination_block.rb +11 -0
  96. data/vendor/spinel/test/array_compact_eq.rb +16 -0
  97. data/vendor/spinel/test/array_compact_eq.rb.expected +10 -0
  98. data/vendor/spinel/test/array_fill_poly.rb.expected +1 -0
  99. data/vendor/spinel/test/array_first_last_empty.rb +12 -0
  100. data/vendor/spinel/test/array_first_last_empty.rb.expected +8 -0
  101. data/vendor/spinel/test/array_flatten_typed_elements.rb +19 -0
  102. data/vendor/spinel/test/array_frozen_mutate_raises.rb +36 -0
  103. data/vendor/spinel/test/array_frozen_mutate_raises.rb.expected +20 -0
  104. data/vendor/spinel/test/array_frozen_slice_bang.rb +19 -0
  105. data/vendor/spinel/test/array_frozen_slice_bang.rb.expected +2 -0
  106. data/vendor/spinel/test/array_get_oob_negative.rb +22 -0
  107. data/vendor/spinel/test/array_get_oob_negative.rb.expected +6 -0
  108. data/vendor/spinel/test/array_grep.rb +12 -0
  109. data/vendor/spinel/test/array_grep.rb.expected +8 -0
  110. data/vendor/spinel/test/array_index_int_opt_narrow.rb +30 -0
  111. data/vendor/spinel/test/array_index_int_opt_narrow.rb.expected +7 -0
  112. data/vendor/spinel/test/array_map_bang.rb +28 -0
  113. data/vendor/spinel/test/array_map_bang.rb.expected +7 -0
  114. data/vendor/spinel/test/array_minmax_block.rb +14 -0
  115. data/vendor/spinel/test/array_negative_index_too_small.rb +22 -0
  116. data/vendor/spinel/test/array_negative_index_too_small.rb.expected +5 -0
  117. data/vendor/spinel/test/array_object_id.rb +12 -0
  118. data/vendor/spinel/test/array_object_id.rb.expected +6 -0
  119. data/vendor/spinel/test/array_pack_returns_string.expected +2 -0
  120. data/vendor/spinel/test/array_pack_returns_string.rb +4 -0
  121. data/vendor/spinel/test/array_pack_string_unpack.rb +12 -0
  122. data/vendor/spinel/test/array_pattern_match_basic.rb +27 -0
  123. data/vendor/spinel/test/array_predicate_no_block.rb +14 -0
  124. data/vendor/spinel/test/array_predicate_no_block.rb.expected +11 -0
  125. data/vendor/spinel/test/array_predicate_no_block_param.rb +14 -0
  126. data/vendor/spinel/test/array_predicate_no_block_param.rb.expected +10 -0
  127. data/vendor/spinel/test/array_product.rb +5 -0
  128. data/vendor/spinel/test/array_push_multi_arg.rb +32 -0
  129. data/vendor/spinel/test/array_push_multi_arg.rb.expected +10 -0
  130. data/vendor/spinel/test/array_select_bang.rb +34 -0
  131. data/vendor/spinel/test/array_select_bang.rb.expected +8 -0
  132. data/vendor/spinel/test/array_slice_before_after.rb +6 -0
  133. data/vendor/spinel/test/array_slice_when_chunk.rb +7 -0
  134. data/vendor/spinel/test/array_to_h_sort_bang_block.rb +26 -0
  135. data/vendor/spinel/test/array_to_h_sort_bang_block.rb.expected +10 -0
  136. data/vendor/spinel/test/array_transpose_poly_elements.rb +34 -0
  137. data/vendor/spinel/test/array_transpose_typed_elements.rb +19 -0
  138. data/vendor/spinel/test/array_unresolved_inspect_no_segv.rb +9 -0
  139. data/vendor/spinel/test/array_unresolved_inspect_no_segv.rb.expected +2 -0
  140. data/vendor/spinel/test/at_exit_lifo.rb +6 -0
  141. data/vendor/spinel/test/at_exit_lifo.rb.expected +4 -0
  142. data/vendor/spinel/test/back_ref.rb +15 -1
  143. data/vendor/spinel/test/back_ref.rb.expected +5 -0
  144. data/vendor/spinel/test/bang_op_ruby_truthy.expected +7 -0
  145. data/vendor/spinel/test/bang_op_ruby_truthy.rb +10 -0
  146. data/vendor/spinel/test/bare_arg_in_module_body.rb +29 -0
  147. data/vendor/spinel/test/bare_sibling_cls_method_call.rb +67 -0
  148. data/vendor/spinel/test/bare_sibling_cls_method_call.rb.expected +4 -0
  149. data/vendor/spinel/test/begin_rescue_as_expression.expected +5 -0
  150. data/vendor/spinel/test/begin_rescue_as_expression.rb +14 -0
  151. data/vendor/spinel/test/begin_rescue_else_clause.rb +63 -0
  152. data/vendor/spinel/test/begin_rescue_else_clause.rb.expected +7 -0
  153. data/vendor/spinel/test/bigint_propagation_chain.rb +33 -0
  154. data/vendor/spinel/test/bigint_propagation_chain.rb.expected +9 -0
  155. data/vendor/spinel/test/bigint_volatile_combo.rb +69 -0
  156. data/vendor/spinel/test/bigint_volatile_combo.rb.expected +18 -0
  157. data/vendor/spinel/test/block_given_block_param.rb +21 -3
  158. data/vendor/spinel/test/block_given_block_param.rb.expected +2 -0
  159. data/vendor/spinel/test/block_given_inline_call_site.expected +2 -0
  160. data/vendor/spinel/test/block_given_inline_call_site.rb +9 -0
  161. data/vendor/spinel/test/block_optional_unused.rb +18 -0
  162. data/vendor/spinel/test/block_optional_unused.rb.expected +4 -0
  163. data/vendor/spinel/test/block_param_call_block_given.rb +46 -0
  164. data/vendor/spinel/test/block_param_call_block_given.rb.expected +6 -0
  165. data/vendor/spinel/test/block_param_call_value_return.rb +32 -0
  166. data/vendor/spinel/test/block_param_call_value_return.rb.expected +5 -0
  167. data/vendor/spinel/test/bm_instance_eval.rb +9 -8
  168. data/vendor/spinel/test/bool_case_equality.rb +10 -0
  169. data/vendor/spinel/test/bool_logical_operators.rb +9 -0
  170. data/vendor/spinel/test/bool_logical_operators.rb.expected +8 -0
  171. data/vendor/spinel/test/builtin_array_method_capture.rb +38 -0
  172. data/vendor/spinel/test/builtin_array_method_capture.rb.expected +11 -0
  173. data/vendor/spinel/test/bundle_array_e.rb +250 -0
  174. data/vendor/spinel/test/bundle_array_e.rb.expected +57 -0
  175. data/vendor/spinel/test/bundle_array_f.rb +169 -0
  176. data/vendor/spinel/test/bundle_class_01.rb +43 -0
  177. data/vendor/spinel/test/bundle_class_01.rb.expected +4 -0
  178. data/vendor/spinel/test/bundle_class_03.rb +57 -0
  179. data/vendor/spinel/test/bundle_class_03.rb.expected +6 -0
  180. data/vendor/spinel/test/bundle_class_05.rb +187 -0
  181. data/vendor/spinel/test/bundle_class_05.rb.expected +14 -0
  182. data/vendor/spinel/test/bundle_class_06.rb +201 -0
  183. data/vendor/spinel/test/bundle_class_06.rb.expected +12 -0
  184. data/vendor/spinel/test/bundle_class_07.rb +72 -0
  185. data/vendor/spinel/test/bundle_class_07.rb.expected +6 -0
  186. data/vendor/spinel/test/bundle_class_08.rb +101 -0
  187. data/vendor/spinel/test/bundle_class_08.rb.expected +9 -0
  188. data/vendor/spinel/test/bundle_class_09.rb +171 -0
  189. data/vendor/spinel/test/bundle_class_09.rb.expected +9 -0
  190. data/vendor/spinel/test/bundle_class_10.rb +189 -0
  191. data/vendor/spinel/test/bundle_class_10.rb.expected +5 -0
  192. data/vendor/spinel/test/bundle_class_11.rb +191 -0
  193. data/vendor/spinel/test/bundle_class_11.rb.expected +8 -0
  194. data/vendor/spinel/test/bundle_class_12.rb +234 -0
  195. data/vendor/spinel/test/bundle_class_12.rb.expected +15 -0
  196. data/vendor/spinel/test/bundle_class_13.rb +61 -0
  197. data/vendor/spinel/test/bundle_class_13.rb.expected +2 -0
  198. data/vendor/spinel/test/bundle_class_14.rb +162 -0
  199. data/vendor/spinel/test/bundle_class_14.rb.expected +10 -0
  200. data/vendor/spinel/test/bundle_class_15.rb +184 -0
  201. data/vendor/spinel/test/bundle_class_15.rb.expected +8 -0
  202. data/vendor/spinel/test/bundle_class_18.rb +101 -0
  203. data/vendor/spinel/test/bundle_class_18.rb.expected +13 -0
  204. data/vendor/spinel/test/bundle_class_19.rb +67 -0
  205. data/vendor/spinel/test/bundle_class_19.rb.expected +8 -0
  206. data/vendor/spinel/test/bundle_class_20.rb +122 -0
  207. data/vendor/spinel/test/bundle_class_20.rb.expected +6 -0
  208. data/vendor/spinel/test/bundle_class_21.rb +208 -0
  209. data/vendor/spinel/test/bundle_class_21.rb.expected +27 -0
  210. data/vendor/spinel/test/bundle_class_22.rb +218 -0
  211. data/vendor/spinel/test/bundle_class_22.rb.expected +23 -0
  212. data/vendor/spinel/test/bundle_class_23.rb +187 -0
  213. data/vendor/spinel/test/bundle_class_23.rb.expected +19 -0
  214. data/vendor/spinel/test/bundle_class_a.rb +111 -0
  215. data/vendor/spinel/test/bundle_class_a.rb.expected +14 -0
  216. data/vendor/spinel/test/bundle_classd_04.rb +149 -0
  217. data/vendor/spinel/test/bundle_classd_04.rb.expected +15 -0
  218. data/vendor/spinel/test/bundle_classd_05.rb +65 -0
  219. data/vendor/spinel/test/bundle_classd_05.rb.expected +15 -0
  220. data/vendor/spinel/test/bundle_classd_08.rb +44 -0
  221. data/vendor/spinel/test/bundle_classd_08.rb.expected +4 -0
  222. data/vendor/spinel/test/bundle_classd_09.rb +221 -0
  223. data/vendor/spinel/test/bundle_classd_09.rb.expected +16 -0
  224. data/vendor/spinel/test/bundle_classd_10.rb +77 -0
  225. data/vendor/spinel/test/bundle_classd_10.rb.expected +10 -0
  226. data/vendor/spinel/test/bundle_classd_11.rb +89 -0
  227. data/vendor/spinel/test/bundle_classd_11.rb.expected +6 -0
  228. data/vendor/spinel/test/bundle_classd_12.rb +211 -0
  229. data/vendor/spinel/test/bundle_classd_12.rb.expected +19 -0
  230. data/vendor/spinel/test/bundle_classd_13.rb +246 -0
  231. data/vendor/spinel/test/bundle_classd_13.rb.expected +20 -0
  232. data/vendor/spinel/test/bundle_classd_14.rb +72 -0
  233. data/vendor/spinel/test/bundle_classd_14.rb.expected +10 -0
  234. data/vendor/spinel/test/bundle_classd_17.rb +206 -0
  235. data/vendor/spinel/test/bundle_classd_17.rb.expected +17 -0
  236. data/vendor/spinel/test/bundle_classd_18.rb +89 -0
  237. data/vendor/spinel/test/bundle_classd_18.rb.expected +3 -0
  238. data/vendor/spinel/test/bundle_classd_19.rb +134 -0
  239. data/vendor/spinel/test/bundle_classd_19.rb.expected +23 -0
  240. data/vendor/spinel/test/bundle_classd_26.rb +103 -0
  241. data/vendor/spinel/test/bundle_classd_26.rb.expected +7 -0
  242. data/vendor/spinel/test/bundle_classd_27.rb +241 -0
  243. data/vendor/spinel/test/bundle_classd_27.rb.expected +15 -0
  244. data/vendor/spinel/test/bundle_classd_28.rb +80 -0
  245. data/vendor/spinel/test/bundle_classd_28.rb.expected +10 -0
  246. data/vendor/spinel/test/bundle_classd_32.rb +63 -0
  247. data/vendor/spinel/test/bundle_classd_32.rb.expected +7 -0
  248. data/vendor/spinel/test/bundle_classd_33.rb +117 -0
  249. data/vendor/spinel/test/bundle_classd_33.rb.expected +17 -0
  250. data/vendor/spinel/test/bundle_classd_35.rb +90 -0
  251. data/vendor/spinel/test/bundle_classd_35.rb.expected +5 -0
  252. data/vendor/spinel/test/bundle_classd_36.rb +97 -0
  253. data/vendor/spinel/test/bundle_classd_36.rb.expected +5 -0
  254. data/vendor/spinel/test/bundle_classd_38.rb +50 -0
  255. data/vendor/spinel/test/bundle_classd_38.rb.expected +7 -0
  256. data/vendor/spinel/test/bundle_classd_39.rb +76 -0
  257. data/vendor/spinel/test/bundle_classd_39.rb.expected +15 -0
  258. data/vendor/spinel/test/bundle_classd_43.rb +84 -0
  259. data/vendor/spinel/test/bundle_classd_43.rb.expected +7 -0
  260. data/vendor/spinel/test/bundle_classd_45.rb +115 -0
  261. data/vendor/spinel/test/bundle_classd_45.rb.expected +7 -0
  262. data/vendor/spinel/test/bundle_classd_46.rb +72 -0
  263. data/vendor/spinel/test/bundle_classd_46.rb.expected +5 -0
  264. data/vendor/spinel/test/bundle_classd_48.rb +85 -0
  265. data/vendor/spinel/test/bundle_classd_49.rb +153 -0
  266. data/vendor/spinel/test/bundle_classd_50.rb +200 -0
  267. data/vendor/spinel/test/bundle_classd_50.rb.expected +10 -0
  268. data/vendor/spinel/test/bundle_classd_51.rb +191 -0
  269. data/vendor/spinel/test/bundle_classd_51.rb.expected +12 -0
  270. data/vendor/spinel/test/bundle_file_a.rb +119 -0
  271. data/vendor/spinel/test/bundle_file_a.rb.expected +23 -0
  272. data/vendor/spinel/test/bundle_hash_b1.rb +99 -0
  273. data/vendor/spinel/test/bundle_hash_b2.rb +107 -0
  274. data/vendor/spinel/test/bundle_int_a.rb +104 -0
  275. data/vendor/spinel/test/bundle_int_a.rb.expected +23 -0
  276. data/vendor/spinel/test/bundle_misc_c_08.rb +170 -0
  277. data/vendor/spinel/test/bundle_misc_c_08.rb.expected +33 -0
  278. data/vendor/spinel/test/bundle_misc_c_09.rb +72 -0
  279. data/vendor/spinel/test/bundle_misc_c_09.rb.expected +6 -0
  280. data/vendor/spinel/test/bundle_misc_c_10.rb +73 -0
  281. data/vendor/spinel/test/bundle_misc_c_10.rb.expected +8 -0
  282. data/vendor/spinel/test/bundle_misc_c_17.rb +124 -0
  283. data/vendor/spinel/test/bundle_misc_c_17.rb.expected +18 -0
  284. data/vendor/spinel/test/bundle_misc_c_23.rb +97 -0
  285. data/vendor/spinel/test/bundle_misc_c_23.rb.expected +10 -0
  286. data/vendor/spinel/test/bundle_misc_c_26.rb +107 -0
  287. data/vendor/spinel/test/bundle_misc_c_26.rb.expected +24 -0
  288. data/vendor/spinel/test/bundle_misc_c_30.rb +94 -0
  289. data/vendor/spinel/test/bundle_misc_c_31.rb +89 -0
  290. data/vendor/spinel/test/bundle_misc_c_31.rb.expected +14 -0
  291. data/vendor/spinel/test/bundle_misc_c_33.rb +163 -0
  292. data/vendor/spinel/test/bundle_misc_c_33.rb.expected +53 -0
  293. data/vendor/spinel/test/bundle_misc_c_34.rb +106 -0
  294. data/vendor/spinel/test/bundle_misc_c_34.rb.expected +11 -0
  295. data/vendor/spinel/test/bundle_misc_c_35.rb +143 -0
  296. data/vendor/spinel/test/bundle_misc_c_35.rb.expected +44 -0
  297. data/vendor/spinel/test/bundle_misc_c_36.rb +165 -0
  298. data/vendor/spinel/test/bundle_misc_c_36.rb.expected +59 -0
  299. data/vendor/spinel/test/bundle_misc_c_37.rb +119 -0
  300. data/vendor/spinel/test/bundle_misc_c_37.rb.expected +22 -0
  301. data/vendor/spinel/test/bundle_poly_b1.rb +44 -0
  302. data/vendor/spinel/test/bundle_poly_b1.rb.expected +7 -0
  303. data/vendor/spinel/test/bundle_string_c.rb +250 -0
  304. data/vendor/spinel/test/bundle_string_c.rb.expected +51 -0
  305. data/vendor/spinel/test/bundle_sym.rb +2 -4
  306. data/vendor/spinel/test/bundle_tiny_array.rb +160 -0
  307. data/vendor/spinel/test/bundle_tiny_array.rb.expected +53 -0
  308. data/vendor/spinel/test/bundle_tiny_misc.rb +187 -0
  309. data/vendor/spinel/test/bundle_tiny_misc.rb.expected +59 -0
  310. data/vendor/spinel/test/bundle_tiny_num.rb +87 -0
  311. data/vendor/spinel/test/bundle_tiny_num.rb.expected +27 -0
  312. data/vendor/spinel/test/bundle_tiny_string.rb +226 -0
  313. data/vendor/spinel/test/bundle_tiny_string.rb.expected +78 -0
  314. data/vendor/spinel/test/captured_block_call_value.rb +45 -0
  315. data/vendor/spinel/test/captured_block_call_value.rb.expected +5 -0
  316. data/vendor/spinel/test/case_fallthrough_returns_nil.expected +5 -0
  317. data/vendor/spinel/test/case_fallthrough_returns_nil.rb +8 -0
  318. data/vendor/spinel/test/case_in_no_match_error.rb +54 -0
  319. data/vendor/spinel/test/case_in_no_match_error.rb.expected +6 -0
  320. data/vendor/spinel/test/case_local_in_lambda.rb +57 -0
  321. data/vendor/spinel/test/case_local_in_lambda.rb.expected +5 -0
  322. data/vendor/spinel/test/case_when_class.rb +28 -66
  323. data/vendor/spinel/test/case_when_class.rb.expected +5 -5
  324. data/vendor/spinel/test/case_when_class_scalar_predicate.rb +53 -0
  325. data/vendor/spinel/test/case_when_class_scalar_predicate.rb.expected +3 -0
  326. data/vendor/spinel/test/case_when_poly_scrutinee_bound_to_local.rb +36 -0
  327. data/vendor/spinel/test/case_when_poly_scrutinee_bound_to_local.rb.expected +5 -0
  328. data/vendor/spinel/test/case_when_qualified_class.rb +47 -0
  329. data/vendor/spinel/test/case_when_qualified_class.rb.expected +2 -0
  330. data/vendor/spinel/test/case_when_regex.rb +23 -0
  331. data/vendor/spinel/test/case_when_regex.rb.expected +3 -0
  332. data/vendor/spinel/test/chained_aset_on_poly_hash_recv.rb +19 -0
  333. data/vendor/spinel/test/chained_aset_on_poly_hash_recv.rb.expected +1 -0
  334. data/vendor/spinel/test/clamp_string_and_range.rb +14 -0
  335. data/vendor/spinel/test/clamp_string_and_range.rb.expected +8 -0
  336. data/vendor/spinel/test/class_const_as_value.rb +58 -0
  337. data/vendor/spinel/test/class_const_as_value.rb.expected +4 -0
  338. data/vendor/spinel/test/class_hierarchy.rb +41 -0
  339. data/vendor/spinel/test/class_hierarchy.rb.expected +10 -0
  340. data/vendor/spinel/test/class_hierarchy_builtin.rb +43 -0
  341. data/vendor/spinel/test/class_hierarchy_builtin.rb.expected +14 -0
  342. data/vendor/spinel/test/class_hierarchy_module.rb +55 -0
  343. data/vendor/spinel/test/class_hierarchy_module.rb.expected +6 -0
  344. data/vendor/spinel/test/class_in_collection.rb +22 -0
  345. data/vendor/spinel/test/class_in_collection.rb.expected +10 -0
  346. data/vendor/spinel/test/class_ivar_in_class_method.rb +66 -0
  347. data/vendor/spinel/test/class_ivar_in_class_method.rb.expected +11 -0
  348. data/vendor/spinel/test/class_lt_builtin_parent.rb +13 -0
  349. data/vendor/spinel/test/class_name_in_cmeth.rb +30 -0
  350. data/vendor/spinel/test/class_name_in_cmeth.rb.expected +3 -0
  351. data/vendor/spinel/test/class_of_primitive.rb +14 -0
  352. data/vendor/spinel/test/class_of_primitive.rb.expected +9 -0
  353. data/vendor/spinel/test/class_phase2_name_eq.rb +61 -0
  354. data/vendor/spinel/test/class_phase2_name_eq.rb.expected +15 -0
  355. data/vendor/spinel/test/class_reopen_replaces_methods.rb +40 -0
  356. data/vendor/spinel/test/class_reopen_replaces_methods.rb.expected +3 -0
  357. data/vendor/spinel/test/class_singleton_def.rb +27 -0
  358. data/vendor/spinel/test/class_singleton_def.rb.expected +4 -0
  359. data/vendor/spinel/test/class_superclass.rb +15 -0
  360. data/vendor/spinel/test/class_superclass.rb.expected +3 -0
  361. data/vendor/spinel/test/class_value_builtin_and_nested.rb +36 -0
  362. data/vendor/spinel/test/cls_method_specialization_boxer.expected +2 -0
  363. data/vendor/spinel/test/cls_method_specialization_boxer.rb +47 -0
  364. data/vendor/spinel/test/cmeth_name_collision_with_kernel.rb +56 -0
  365. data/vendor/spinel/test/cmeth_name_collision_with_kernel.rb.expected +5 -0
  366. data/vendor/spinel/test/cmeth_return_nil_or_obj_via_intermediate.rb +89 -0
  367. data/vendor/spinel/test/cmeth_return_nil_or_obj_via_intermediate.rb.expected +6 -0
  368. data/vendor/spinel/test/comparable_between_user_type.rb +26 -0
  369. data/vendor/spinel/test/comparable_between_user_type.rb.expected +10 -0
  370. data/vendor/spinel/test/compile_time_attribute_singular.rb +12 -0
  371. data/vendor/spinel/test/compile_time_attribute_singular.rb.expected +2 -0
  372. data/vendor/spinel/test/compile_time_attribute_wrapped_record.rb +72 -0
  373. data/vendor/spinel/test/compile_time_attribute_wrapped_record.rb.expected +2 -0
  374. data/vendor/spinel/test/compile_time_attributes.rb +14 -0
  375. data/vendor/spinel/test/compile_time_attributes.rb.expected +3 -0
  376. data/vendor/spinel/test/compile_time_define_method_direct.rb +8 -0
  377. data/vendor/spinel/test/compile_time_define_method_direct.rb.expected +2 -0
  378. data/vendor/spinel/test/compile_time_define_method_int.rb +9 -0
  379. data/vendor/spinel/test/compile_time_define_method_int.rb.expected +2 -0
  380. data/vendor/spinel/test/compile_time_define_method_predicates.rb +18 -0
  381. data/vendor/spinel/test/compile_time_define_method_predicates.rb.expected +4 -0
  382. data/vendor/spinel/test/compile_time_define_method_strings.rb +9 -0
  383. data/vendor/spinel/test/compile_time_define_method_strings.rb.expected +2 -0
  384. data/vendor/spinel/test/complex_polar.rb +37 -0
  385. data/vendor/spinel/test/complex_polar.rb.expected +10 -0
  386. data/vendor/spinel/test/concat_chain_operand_gc_root.rb +16 -0
  387. data/vendor/spinel/test/concat_chain_operand_gc_root.rb.expected +4 -0
  388. data/vendor/spinel/test/concat_print_poly_unbox.rb +115 -0
  389. data/vendor/spinel/test/concat_print_poly_unbox.rb.expected +9 -0
  390. data/vendor/spinel/test/const_aliased_class_reopen_include.rb +33 -0
  391. data/vendor/spinel/test/const_aliased_class_reopen_include.rb.expected +2 -0
  392. data/vendor/spinel/test/const_compound_assign.rb +34 -0
  393. data/vendor/spinel/test/const_path_compound_assign.rb +15 -0
  394. data/vendor/spinel/test/const_path_deep_nesting.rb +30 -0
  395. data/vendor/spinel/test/const_path_deep_nesting.rb.expected +2 -0
  396. data/vendor/spinel/test/const_path_unresolved_require.rb +11 -0
  397. data/vendor/spinel/test/const_path_unresolved_require.rb.expected +2 -0
  398. data/vendor/spinel/test/const_self_ref_raises_name_error.rb +44 -0
  399. data/vendor/spinel/test/const_self_ref_raises_name_error.rb.expected +3 -0
  400. data/vendor/spinel/test/crashers_536.rb +32 -0
  401. data/vendor/spinel/test/crashers_536.rb.expected +4 -0
  402. data/vendor/spinel/test/cvar_method_first_assign.rb +6 -0
  403. data/vendor/spinel/test/data_define.rb +27 -0
  404. data/vendor/spinel/test/data_define.rb.expected +5 -0
  405. data/vendor/spinel/test/default_nil_param_with_str_return.rb +30 -0
  406. data/vendor/spinel/test/default_nil_param_with_str_return.rb.expected +4 -0
  407. data/vendor/spinel/test/defined_globals_methods.rb +15 -0
  408. data/vendor/spinel/test/defined_globals_methods.rb.expected +5 -0
  409. data/vendor/spinel/test/defined_op.rb +17 -0
  410. data/vendor/spinel/test/defined_op.rb.expected +8 -0
  411. data/vendor/spinel/test/destructure_typed_ptr_array_return.rb +30 -0
  412. data/vendor/spinel/test/destructure_typed_ptr_array_return.rb.expected +2 -0
  413. data/vendor/spinel/test/dir_exist.rb +2 -0
  414. data/vendor/spinel/test/dir_methods.rb +15 -0
  415. data/vendor/spinel/test/double_splat_kwargs.rb +26 -0
  416. data/vendor/spinel/test/double_splat_kwargs.rb.expected +6 -0
  417. data/vendor/spinel/test/dynamic_class_new.rb +44 -0
  418. data/vendor/spinel/test/dynamic_class_new.rb.expected +4 -0
  419. data/vendor/spinel/test/dynamic_is_a.rb +41 -0
  420. data/vendor/spinel/test/dynamic_is_a.rb.expected +5 -0
  421. data/vendor/spinel/test/each_cons_block_destructure.rb +10 -0
  422. data/vendor/spinel/test/each_cons_with_index_map_no_double_gets.rb +21 -0
  423. data/vendor/spinel/test/each_cons_with_index_map_no_double_gets.rb.expected +3 -0
  424. data/vendor/spinel/test/each_entry_reverse_each.rb +8 -0
  425. data/vendor/spinel/test/each_slice_map.rb +7 -0
  426. data/vendor/spinel/test/empty_array_local_arg_widen.rb +57 -0
  427. data/vendor/spinel/test/empty_array_local_arg_widen.rb.expected +2 -0
  428. data/vendor/spinel/test/empty_array_loop_intermediate_push.rb +103 -0
  429. data/vendor/spinel/test/empty_array_loop_intermediate_push.rb.expected +5 -0
  430. data/vendor/spinel/test/empty_array_push_container_elem.rb +35 -0
  431. data/vendor/spinel/test/empty_array_push_ptr.rb +26 -0
  432. data/vendor/spinel/test/empty_array_push_ptr.rb.expected +3 -0
  433. data/vendor/spinel/test/empty_hash_arg_param_widen.rb +44 -0
  434. data/vendor/spinel/test/empty_hash_arg_param_widen.rb.expected +6 -0
  435. data/vendor/spinel/test/empty_hash_int_int_no_widen.rb +46 -0
  436. data/vendor/spinel/test/empty_hash_int_int_no_widen.rb.expected +4 -0
  437. data/vendor/spinel/test/empty_hash_int_int_promote.rb +32 -0
  438. data/vendor/spinel/test/empty_hash_int_int_promote.rb.expected +8 -0
  439. data/vendor/spinel/test/empty_int_array_min_max.rb +15 -0
  440. data/vendor/spinel/test/empty_int_array_min_max.rb.expected +4 -0
  441. data/vendor/spinel/test/empty_method_returns_nil.rb +8 -0
  442. data/vendor/spinel/test/empty_method_returns_nil.rb.expected +3 -0
  443. data/vendor/spinel/test/empty_symbol_literal.rb +23 -0
  444. data/vendor/spinel/test/empty_symbol_literal.rb.expected +9 -0
  445. data/vendor/spinel/test/eq_string_vs_int.rb +20 -0
  446. data/vendor/spinel/test/eq_string_vs_int.rb.expected +9 -0
  447. data/vendor/spinel/test/exception_backtrace_empty.rb +12 -0
  448. data/vendor/spinel/test/exception_backtrace_empty.rb.expected +4 -0
  449. data/vendor/spinel/test/exception_class_new.rb +46 -0
  450. data/vendor/spinel/test/exception_class_new.rb.expected +10 -0
  451. data/vendor/spinel/test/exception_namespaced_default_message.rb +28 -0
  452. data/vendor/spinel/test/exception_namespaced_default_message.rb.expected +4 -0
  453. data/vendor/spinel/test/exception_object_methods.rb +3 -2
  454. data/vendor/spinel/test/exception_object_methods.rb.expected +1 -1
  455. data/vendor/spinel/test/exception_super_interpolated_message.rb +41 -0
  456. data/vendor/spinel/test/exception_super_interpolated_message.rb.expected +5 -0
  457. data/vendor/spinel/test/exception_user_subclass.rb +35 -0
  458. data/vendor/spinel/test/exception_user_subclass.rb.expected +10 -0
  459. data/vendor/spinel/test/extend_module.rb +30 -0
  460. data/vendor/spinel/test/extend_module.rb.expected +4 -0
  461. data/vendor/spinel/test/ffi_array_specs_decl.rb +25 -0
  462. data/vendor/spinel/test/ffi_int_arg_poly_value.rb +27 -0
  463. data/vendor/spinel/test/ffi_ptr_array.rb +35 -0
  464. data/vendor/spinel/test/ffi_ptr_int_literal.rb +31 -0
  465. data/vendor/spinel/test/ffi_str_arg_poly_value.rb +26 -0
  466. data/vendor/spinel/test/fiber_capture_no_leak_to_sibling.rb +27 -0
  467. data/vendor/spinel/test/fiber_capture_no_leak_to_sibling.rb.expected +1 -0
  468. data/vendor/spinel/test/fiber_gc_root_isolation.rb +76 -0
  469. data/vendor/spinel/test/file_dir_methods.rb +11 -0
  470. data/vendor/spinel/test/file_dir_methods.rb.expected +8 -0
  471. data/vendor/spinel/test/file_expand_path.rb +10 -0
  472. data/vendor/spinel/test/file_expand_path.rb.expected +8 -0
  473. data/vendor/spinel/test/file_mtime.rb +10 -0
  474. data/vendor/spinel/test/file_mtime.rb.expected +2 -0
  475. data/vendor/spinel/test/file_read_count.rb +19 -0
  476. data/vendor/spinel/test/file_read_count.rb.expected +5 -0
  477. data/vendor/spinel/test/file_readlines.rb +15 -0
  478. data/vendor/spinel/test/file_readlines.rb.expected +4 -0
  479. data/vendor/spinel/test/file_write_at_tail_position.rb +16 -0
  480. data/vendor/spinel/test/float_array_first_last_nil.rb +20 -0
  481. data/vendor/spinel/test/float_array_first_last_nil.rb.expected +8 -0
  482. data/vendor/spinel/test/float_divmod_zerodiv.rb +57 -0
  483. data/vendor/spinel/test/float_divmod_zerodiv.rb.expected +7 -0
  484. data/vendor/spinel/test/float_limit_constants.rb +14 -0
  485. data/vendor/spinel/test/float_round_ndigits_return_type.rb +24 -0
  486. data/vendor/spinel/test/float_round_ndigits_return_type.rb.expected +14 -0
  487. data/vendor/spinel/test/float_round_value_based_type.rb +17 -0
  488. data/vendor/spinel/test/float_round_value_based_type.rb.expected +14 -0
  489. data/vendor/spinel/test/float_round_zero.rb +18 -0
  490. data/vendor/spinel/test/float_round_zero.rb.expected +11 -0
  491. data/vendor/spinel/test/float_spaceship.rb +13 -0
  492. data/vendor/spinel/test/float_step_block.rb +16 -0
  493. data/vendor/spinel/test/float_step_block.rb.expected +3 -0
  494. data/vendor/spinel/test/float_step_to_a.rb +20 -0
  495. data/vendor/spinel/test/float_step_to_a.rb.expected +10 -0
  496. data/vendor/spinel/test/gc_grandparent_ivar_scan.rb +28 -0
  497. data/vendor/spinel/test/gc_grandparent_ivar_scan.rb.expected +2 -0
  498. data/vendor/spinel/test/gc_poly_local_int.rb +11 -0
  499. data/vendor/spinel/test/gc_poly_local_int.rb.expected +1 -0
  500. data/vendor/spinel/test/gc_poly_local_root.rb +19 -0
  501. data/vendor/spinel/test/gc_poly_local_root.rb.expected +1 -0
  502. data/vendor/spinel/test/gc_poly_local_setjmp.rb +16 -0
  503. data/vendor/spinel/test/gc_poly_local_setjmp.rb.expected +1 -0
  504. data/vendor/spinel/test/gc_root_call_args.rb +35 -0
  505. data/vendor/spinel/test/gc_root_call_args.rb.expected +3 -0
  506. data/vendor/spinel/test/gc_root_heap_param.rb +21 -0
  507. data/vendor/spinel/test/gc_root_heap_param.rb.expected +1 -0
  508. data/vendor/spinel/test/global_multi_assign.rb +28 -0
  509. data/vendor/spinel/test/global_var_punct.rb +9 -0
  510. data/vendor/spinel/test/gsub_sub_block.rb +14 -0
  511. data/vendor/spinel/test/gsub_sub_block.rb.expected +7 -0
  512. data/vendor/spinel/test/gsub_with_hash_replacement.rb +19 -0
  513. data/vendor/spinel/test/gsub_with_hash_replacement.rb.expected +3 -0
  514. data/vendor/spinel/test/hangs_548.rb +66 -0
  515. data/vendor/spinel/test/hangs_548.rb.expected +4 -0
  516. data/vendor/spinel/test/hash_block_methods_variants.rb +15 -0
  517. data/vendor/spinel/test/hash_block_methods_variants.rb.expected +12 -0
  518. data/vendor/spinel/test/hash_clear.rb +43 -0
  519. data/vendor/spinel/test/hash_clear.rb.expected +12 -0
  520. data/vendor/spinel/test/hash_compound_assign_more.rb +21 -0
  521. data/vendor/spinel/test/hash_delete_if_select_reject_bang.rb +19 -0
  522. data/vendor/spinel/test/hash_delete_if_select_reject_bang.rb.expected +4 -0
  523. data/vendor/spinel/test/hash_delete_returns_value.rb +21 -0
  524. data/vendor/spinel/test/hash_delete_returns_value.rb.expected +8 -0
  525. data/vendor/spinel/test/hash_dispatch_missing_cells.rb +24 -0
  526. data/vendor/spinel/test/hash_dispatch_missing_cells.rb.expected +8 -0
  527. data/vendor/spinel/test/hash_each_key_value.rb +85 -0
  528. data/vendor/spinel/test/hash_each_key_value.rb.expected +72 -0
  529. data/vendor/spinel/test/hash_each_with_object.rb +16 -0
  530. data/vendor/spinel/test/hash_each_with_object.rb.expected +2 -0
  531. data/vendor/spinel/test/hash_fetch_block.rb +31 -0
  532. data/vendor/spinel/test/hash_fetch_block.rb.expected +13 -0
  533. data/vendor/spinel/test/hash_fetch_block_key.rb +9 -0
  534. data/vendor/spinel/test/hash_fetch_block_key.rb.expected +4 -0
  535. data/vendor/spinel/test/hash_fetch_block_key_type.rb +37 -0
  536. data/vendor/spinel/test/hash_fetch_block_key_type.rb.expected +7 -0
  537. data/vendor/spinel/test/hash_fetch_keyerror.rb +23 -0
  538. data/vendor/spinel/test/hash_flatten_rassoc_compact.rb +33 -0
  539. data/vendor/spinel/test/hash_float_value_preserved.rb +27 -0
  540. data/vendor/spinel/test/hash_float_value_preserved.rb.expected +6 -0
  541. data/vendor/spinel/test/hash_index_assign_expression.rb +21 -0
  542. data/vendor/spinel/test/hash_inspect_poly.rb +13 -0
  543. data/vendor/spinel/test/hash_inspect_poly.rb.expected +6 -0
  544. data/vendor/spinel/test/hash_int_and_or_assign.rb +30 -0
  545. data/vendor/spinel/test/hash_int_and_or_assign.rb.expected +8 -0
  546. data/vendor/spinel/test/hash_invert.rb +16 -0
  547. data/vendor/spinel/test/hash_invert.rb.expected +4 -0
  548. data/vendor/spinel/test/hash_key_via_intermediate_local.rb +32 -0
  549. data/vendor/spinel/test/hash_map_block.rb +6 -0
  550. data/vendor/spinel/test/hash_merge_with_block.rb +10 -0
  551. data/vendor/spinel/test/hash_new_default_block_assign.rb +16 -0
  552. data/vendor/spinel/test/hash_param_each_kv_inference.rb +67 -0
  553. data/vendor/spinel/test/hash_param_each_kv_inference.rb.expected +3 -0
  554. data/vendor/spinel/test/hash_param_each_kv_weak_default.rb +75 -0
  555. data/vendor/spinel/test/hash_param_each_kv_weak_default.rb.expected +6 -0
  556. data/vendor/spinel/test/hash_param_widen_from_callee_slot.rb +43 -0
  557. data/vendor/spinel/test/hash_replace_variants.rb +17 -0
  558. data/vendor/spinel/test/hash_replace_variants.rb.expected +6 -0
  559. data/vendor/spinel/test/hash_temp_gc_root.rb +26 -0
  560. data/vendor/spinel/test/hash_transform_keys_cross.rb +12 -0
  561. data/vendor/spinel/test/hash_transform_keys_cross.rb.expected +5 -0
  562. data/vendor/spinel/test/hash_value_p.rb +19 -0
  563. data/vendor/spinel/test/hash_value_p.rb.expected +7 -0
  564. data/vendor/spinel/test/hash_value_split_widen.rb +22 -0
  565. data/vendor/spinel/test/hash_value_split_widen.rb.expected +2 -0
  566. data/vendor/spinel/test/hash_values_at_fetch_values.rb +23 -0
  567. data/vendor/spinel/test/hash_variant_call_boundary_sym.rb +27 -0
  568. data/vendor/spinel/test/hash_variant_call_boundary_sym.rb.expected +2 -0
  569. data/vendor/spinel/test/heterogeneous_tuple_return.rb +32 -0
  570. data/vendor/spinel/test/heterogeneous_tuple_return.rb.expected +7 -0
  571. data/vendor/spinel/test/i1006.rb +21 -0
  572. data/vendor/spinel/test/i1006.rb.expected +7 -0
  573. data/vendor/spinel/test/i1007.rb +25 -0
  574. data/vendor/spinel/test/i1007.rb.expected +4 -0
  575. data/vendor/spinel/test/i1009.rb +9 -0
  576. data/vendor/spinel/test/i1009.rb.expected +4 -0
  577. data/vendor/spinel/test/i1011.rb +12 -0
  578. data/vendor/spinel/test/i1011.rb.expected +2 -0
  579. data/vendor/spinel/test/i1015.rb +11 -0
  580. data/vendor/spinel/test/i1015.rb.expected +2 -0
  581. data/vendor/spinel/test/i1017.rb +37 -0
  582. data/vendor/spinel/test/i1017.rb.expected +1 -0
  583. data/vendor/spinel/test/i1020.rb +31 -0
  584. data/vendor/spinel/test/i1020.rb.expected +2 -0
  585. data/vendor/spinel/test/i1021.rb +12 -0
  586. data/vendor/spinel/test/i1021.rb.expected +9 -0
  587. data/vendor/spinel/test/i1027.rb +28 -0
  588. data/vendor/spinel/test/i1027.rb.expected +1 -0
  589. data/vendor/spinel/test/i1031.rb +64 -0
  590. data/vendor/spinel/test/i1031.rb.expected +4 -0
  591. data/vendor/spinel/test/i1035.rb +18 -0
  592. data/vendor/spinel/test/i1035.rb.expected +3 -0
  593. data/vendor/spinel/test/i1038.rb +7 -0
  594. data/vendor/spinel/test/i1038.rb.expected +4 -0
  595. data/vendor/spinel/test/i1041.rb +31 -0
  596. data/vendor/spinel/test/i1041.rb.expected +4 -0
  597. data/vendor/spinel/test/i709.rb +41 -0
  598. data/vendor/spinel/test/i709.rb.expected +3 -0
  599. data/vendor/spinel/test/i898.rb +23 -0
  600. data/vendor/spinel/test/i898.rb.expected +7 -0
  601. data/vendor/spinel/test/i912.rb +15 -0
  602. data/vendor/spinel/test/i912.rb.expected +8 -0
  603. data/vendor/spinel/test/i916.rb +14 -0
  604. data/vendor/spinel/test/i916.rb.expected +4 -0
  605. data/vendor/spinel/test/i918.rb +45 -0
  606. data/vendor/spinel/test/i918.rb.expected +13 -0
  607. data/vendor/spinel/test/i919.rb +12 -0
  608. data/vendor/spinel/test/i919.rb.expected +5 -0
  609. data/vendor/spinel/test/i920.rb +9 -0
  610. data/vendor/spinel/test/i920.rb.expected +4 -0
  611. data/vendor/spinel/test/i960.rb +13 -0
  612. data/vendor/spinel/test/i960.rb.expected +5 -0
  613. data/vendor/spinel/test/i972.rb +38 -0
  614. data/vendor/spinel/test/i972.rb.expected +11 -0
  615. data/vendor/spinel/test/i974.rb +23 -0
  616. data/vendor/spinel/test/i974.rb.expected +19 -0
  617. data/vendor/spinel/test/i994.rb +18 -0
  618. data/vendor/spinel/test/i994.rb.expected +9 -0
  619. data/vendor/spinel/test/i997.rb +20 -0
  620. data/vendor/spinel/test/i997.rb.expected +6 -0
  621. data/vendor/spinel/test/if_expr_multi_stmt_body.rb +78 -0
  622. data/vendor/spinel/test/if_expr_multi_stmt_body.rb.expected +13 -0
  623. data/vendor/spinel/test/implicit_alloc_site_cache_helper_specialization.rb +112 -0
  624. data/vendor/spinel/test/implicit_alloc_site_cache_helper_specialization.rb.expected +6 -0
  625. data/vendor/spinel/test/implicit_alloc_site_escape_layout.rb +30 -0
  626. data/vendor/spinel/test/implicit_alloc_site_escape_layout.rb.expected +2 -0
  627. data/vendor/spinel/test/implicit_alloc_site_escape_param.rb +27 -0
  628. data/vendor/spinel/test/implicit_alloc_site_escape_param.rb.expected +2 -0
  629. data/vendor/spinel/test/implicit_alloc_site_escape_scoped_locals.rb +44 -0
  630. data/vendor/spinel/test/implicit_alloc_site_escape_scoped_locals.rb.expected +2 -0
  631. data/vendor/spinel/test/implicit_alloc_site_holder_poly_array.rb +23 -0
  632. data/vendor/spinel/test/implicit_alloc_site_holder_poly_array.rb.expected +3 -0
  633. data/vendor/spinel/test/implicit_alloc_site_holder_shared_method.rb +23 -0
  634. data/vendor/spinel/test/implicit_alloc_site_holder_shared_method.rb.expected +3 -0
  635. data/vendor/spinel/test/implicit_alloc_site_holder_specialization.rb +19 -0
  636. data/vendor/spinel/test/implicit_alloc_site_holder_specialization.rb.expected +3 -0
  637. data/vendor/spinel/test/implicit_alloc_site_ivar_helper_return_specialization.rb +46 -0
  638. data/vendor/spinel/test/implicit_alloc_site_ivar_helper_return_specialization.rb.expected +3 -0
  639. data/vendor/spinel/test/implicit_alloc_site_store_specialization.rb +28 -0
  640. data/vendor/spinel/test/implicit_alloc_site_store_specialization.rb.expected +4 -0
  641. data/vendor/spinel/test/implicit_new_local_method_scope.rb +65 -0
  642. data/vendor/spinel/test/implicit_new_local_method_scope.rb.expected +2 -0
  643. data/vendor/spinel/test/include_chain_const_lookup.rb +48 -0
  644. data/vendor/spinel/test/include_chain_const_lookup.rb.expected +3 -0
  645. data/vendor/spinel/test/include_chain_module_nested_const.rb +62 -0
  646. data/vendor/spinel/test/include_chain_module_nested_const.rb.expected +2 -0
  647. data/vendor/spinel/test/include_constant_path.rb +98 -0
  648. data/vendor/spinel/test/include_constant_path.rb.expected +5 -0
  649. data/vendor/spinel/test/include_nested_module.rb +99 -0
  650. data/vendor/spinel/test/include_nested_module.rb.expected +3 -0
  651. data/vendor/spinel/test/include_skips_module_class_methods.rb +27 -0
  652. data/vendor/spinel/test/include_skips_module_class_methods.rb.expected +3 -0
  653. data/vendor/spinel/test/inherited_factory_poly_param_narrow_attr.rb +25 -0
  654. data/vendor/spinel/test/inherited_kwarg_nil_default_string_ivar.rb +61 -0
  655. data/vendor/spinel/test/inherited_kwarg_nil_default_string_ivar.rb.expected +2 -0
  656. data/vendor/spinel/test/inherited_method_kwarg_block_self.rb +67 -0
  657. data/vendor/spinel/test/inherited_method_kwarg_block_self.rb.expected +2 -0
  658. data/vendor/spinel/test/initialize_override_param_inference.rb +68 -0
  659. data/vendor/spinel/test/inject_symbol_op.rb +11 -0
  660. data/vendor/spinel/test/inject_symbol_op.rb.expected +7 -0
  661. data/vendor/spinel/test/inject_symbol_to_proc.rb +41 -0
  662. data/vendor/spinel/test/inject_symbol_to_proc.rb.expected +12 -0
  663. data/vendor/spinel/test/inlined_yield_block_param_type.rb +32 -0
  664. data/vendor/spinel/test/inlined_yield_block_param_type.rb.expected +2 -0
  665. data/vendor/spinel/test/inlined_yield_self_locals.rb +49 -0
  666. data/vendor/spinel/test/inlined_yield_self_locals.rb.expected +5 -0
  667. data/vendor/spinel/test/instance_eval_block_params.rb +93 -0
  668. data/vendor/spinel/test/instance_eval_block_params.rb.expected +10 -0
  669. data/vendor/spinel/test/instance_eval_trampoline.rb +17 -0
  670. data/vendor/spinel/test/instance_eval_trampoline.rb.expected +1 -0
  671. data/vendor/spinel/test/instance_exec_capture.rb +48 -0
  672. data/vendor/spinel/test/instance_exec_capture.rb.expected +7 -0
  673. data/vendor/spinel/test/instance_exec_direct.rb +72 -0
  674. data/vendor/spinel/test/instance_exec_direct.rb.expected +5 -0
  675. data/vendor/spinel/test/instance_exec_override.rb +69 -0
  676. data/vendor/spinel/test/instance_exec_override.rb.expected +4 -0
  677. data/vendor/spinel/test/instance_exec_parity.rb +44 -0
  678. data/vendor/spinel/test/instance_exec_parity.rb.expected +6 -0
  679. data/vendor/spinel/test/instance_exec_return.rb +54 -0
  680. data/vendor/spinel/test/instance_exec_return.rb.expected +7 -0
  681. data/vendor/spinel/test/instance_exec_trampoline.rb +101 -0
  682. data/vendor/spinel/test/instance_exec_trampoline.rb.expected +6 -0
  683. data/vendor/spinel/test/instance_exec_valuetype.rb +48 -0
  684. data/vendor/spinel/test/instance_exec_valuetype.rb.expected +7 -0
  685. data/vendor/spinel/test/instance_methods_false.rb +41 -0
  686. data/vendor/spinel/test/instance_methods_false.rb.expected +14 -0
  687. data/vendor/spinel/test/int_array_bracket_assign_expr.rb +30 -0
  688. data/vendor/spinel/test/int_array_bracket_assign_expr.rb.expected +8 -0
  689. data/vendor/spinel/test/int_array_tally.rb +14 -0
  690. data/vendor/spinel/test/int_array_tally.rb.expected +8 -0
  691. data/vendor/spinel/test/int_array_uniq_bang.rb +15 -0
  692. data/vendor/spinel/test/int_array_uniq_bang.rb.expected +3 -0
  693. data/vendor/spinel/test/int_ceil_floor_round.rb +11 -0
  694. data/vendor/spinel/test/int_ceil_floor_round.rb.expected +8 -0
  695. data/vendor/spinel/test/int_ceil_floor_round_truncate_ndigits.rb +17 -0
  696. data/vendor/spinel/test/int_ceil_floor_round_truncate_ndigits.rb.expected +12 -0
  697. data/vendor/spinel/test/int_hash_missing_nil_check.rb +27 -0
  698. data/vendor/spinel/test/int_hash_missing_nil_check.rb.expected +14 -0
  699. data/vendor/spinel/test/int_int_hash_literal.rb +13 -0
  700. data/vendor/spinel/test/int_int_hash_literal.rb.expected +7 -0
  701. data/vendor/spinel/test/int_int_hash_missing_key_nil.rb +10 -0
  702. data/vendor/spinel/test/int_int_hash_missing_key_nil.rb.expected +8 -0
  703. data/vendor/spinel/test/int_opt_p_inspect.rb +8 -0
  704. data/vendor/spinel/test/int_opt_p_inspect.rb.expected +5 -0
  705. data/vendor/spinel/test/int_overflow_promote.rb +41 -0
  706. data/vendor/spinel/test/int_overflow_raises.rb +34 -0
  707. data/vendor/spinel/test/int_overflow_raises.rb.expected +6 -0
  708. data/vendor/spinel/test/int_round_large_precision.rb +11 -0
  709. data/vendor/spinel/test/int_round_large_precision.rb.expected +8 -0
  710. data/vendor/spinel/test/integer_argument_error.rb +116 -0
  711. data/vendor/spinel/test/integer_argument_error.rb.expected +36 -0
  712. data/vendor/spinel/test/integer_extra_methods.rb +12 -0
  713. data/vendor/spinel/test/integer_extra_methods.rb.expected +8 -0
  714. data/vendor/spinel/test/integer_pow_negative_exponent.rb +17 -0
  715. data/vendor/spinel/test/integer_pow_negative_exponent.rb.expected +6 -0
  716. data/vendor/spinel/test/integer_times_as_expr.rb +9 -0
  717. data/vendor/spinel/test/integer_times_as_expr.rb.expected +3 -0
  718. data/vendor/spinel/test/interp_array_container.rb +41 -0
  719. data/vendor/spinel/test/interp_array_container.rb.expected +8 -0
  720. data/vendor/spinel/test/interpolation_multistmt.rb +15 -0
  721. data/vendor/spinel/test/interpolation_multistmt.rb.expected +3 -0
  722. data/vendor/spinel/test/interpolation_symbol_name.rb +23 -0
  723. data/vendor/spinel/test/interpolation_symbol_name.rb.expected +6 -0
  724. data/vendor/spinel/test/introspection_constant_path.rb +60 -0
  725. data/vendor/spinel/test/introspection_constant_path.rb.expected +13 -0
  726. data/vendor/spinel/test/io_pipe.rb +6 -0
  727. data/vendor/spinel/test/io_pipe.rb.expected +3 -0
  728. data/vendor/spinel/test/is_a_descendant_runtime.rb +59 -0
  729. data/vendor/spinel/test/is_a_descendant_runtime.rb.expected +11 -0
  730. data/vendor/spinel/test/is_a_included_module.rb +28 -0
  731. data/vendor/spinel/test/is_a_included_module.rb.expected +9 -0
  732. data/vendor/spinel/test/ivar_assign_and_expr.rb +22 -0
  733. data/vendor/spinel/test/ivar_assign_and_expr.rb.expected +3 -0
  734. data/vendor/spinel/test/ivar_lazy_init_push_via_inherited_getter.rb +67 -0
  735. data/vendor/spinel/test/ivar_lazy_init_push_via_inherited_getter.rb.expected +6 -0
  736. data/vendor/spinel/test/json_generate_basic.rb +16 -0
  737. data/vendor/spinel/test/json_generate_basic.rb.expected +12 -0
  738. data/vendor/spinel/test/json_generate_struct_record.rb +9 -0
  739. data/vendor/spinel/test/json_generate_struct_record.rb.expected +4 -0
  740. data/vendor/spinel/test/kernel_complex.rb +9 -0
  741. data/vendor/spinel/test/kernel_dir.rb +9 -0
  742. data/vendor/spinel/test/kernel_dir.rb.expected +2 -0
  743. data/vendor/spinel/test/kernel_float_strict.rb +16 -0
  744. data/vendor/spinel/test/kernel_float_strict.rb.expected +6 -0
  745. data/vendor/spinel/test/kernel_integer_with_base.rb +16 -0
  746. data/vendor/spinel/test/kernel_integer_with_base.rb.expected +6 -0
  747. data/vendor/spinel/test/kwarg_back_propagate_callee_type.rb +26 -0
  748. data/vendor/spinel/test/kwarg_back_propagate_callee_type.rb.expected +1 -0
  749. data/vendor/spinel/test/kwargs_double_splat.rb +15 -0
  750. data/vendor/spinel/test/kwargs_double_splat.rb.expected +2 -0
  751. data/vendor/spinel/test/kwargs_merge_default_hash.rb +51 -0
  752. data/vendor/spinel/test/lambda_arrow_string_return.rb +8 -0
  753. data/vendor/spinel/test/lambda_arrow_string_return.rb.expected +2 -0
  754. data/vendor/spinel/test/lambda_inference_chain.rb +35 -0
  755. data/vendor/spinel/test/lambda_inference_chain.rb.expected +5 -0
  756. data/vendor/spinel/test/local_empty_array_push_promotion_propagates.rb +61 -0
  757. data/vendor/spinel/test/local_empty_array_push_promotion_propagates.rb.expected +3 -0
  758. data/vendor/spinel/test/logical_pointer_guard.rb +20 -0
  759. data/vendor/spinel/test/logical_pointer_guard.rb.expected +2 -0
  760. data/vendor/spinel/test/logical_value_return.rb +15 -0
  761. data/vendor/spinel/test/lv_widen_from_callee_arg_slot.rb +56 -0
  762. data/vendor/spinel/test/lv_widen_from_callee_arg_slot.rb.expected +1 -0
  763. data/vendor/spinel/test/map_block_string_new_join.rb +33 -0
  764. data/vendor/spinel/test/map_block_string_new_join.rb.expected +3 -0
  765. data/vendor/spinel/test/map_obj_array_poly_field.rb +28 -0
  766. data/vendor/spinel/test/map_recv_emitted_once.rb +44 -0
  767. data/vendor/spinel/test/map_recv_emitted_once.rb.expected +7 -0
  768. data/vendor/spinel/test/map_to_heap_objects.rb +16 -0
  769. data/vendor/spinel/test/map_to_heap_objects.rb.expected +4 -0
  770. data/vendor/spinel/test/map_to_value_type_objects.rb +26 -0
  771. data/vendor/spinel/test/map_to_value_type_objects.rb.expected +7 -0
  772. data/vendor/spinel/test/masgn_classvar_target.rb +13 -0
  773. data/vendor/spinel/test/masgn_constpath_target.rb +11 -0
  774. data/vendor/spinel/test/method_level_rescue_return.rb +42 -0
  775. data/vendor/spinel/test/method_level_rescue_return.rb.expected +6 -0
  776. data/vendor/spinel/test/method_level_rescue_return_string.rb +39 -0
  777. data/vendor/spinel/test/method_level_rescue_return_string.rb.expected +6 -0
  778. data/vendor/spinel/test/method_return_mixed_int_string.rb +65 -0
  779. data/vendor/spinel/test/method_return_mixed_int_string.rb.expected +10 -0
  780. data/vendor/spinel/test/middle_splat_param.rb +14 -0
  781. data/vendor/spinel/test/middle_splat_param.rb.expected +4 -0
  782. data/vendor/spinel/test/missing_positional_arg_warns.rb +23 -0
  783. data/vendor/spinel/test/missing_positional_arg_warns.rb.expected +2 -0
  784. data/vendor/spinel/test/module_accessor_delete_chain.rb +32 -0
  785. data/vendor/spinel/test/module_accessor_delete_chain.rb.expected +1 -0
  786. data/vendor/spinel/test/module_accessor_nil_check.rb +40 -0
  787. data/vendor/spinel/test/module_accessor_nil_check.rb.expected +2 -0
  788. data/vendor/spinel/test/module_body_string_const_interp.rb +40 -0
  789. data/vendor/spinel/test/module_body_string_const_interp.rb.expected +5 -0
  790. data/vendor/spinel/test/module_class_body_side_effects.rb +32 -0
  791. data/vendor/spinel/test/module_class_body_side_effects.rb.expected +7 -0
  792. data/vendor/spinel/test/module_class_reflection.rb +27 -0
  793. data/vendor/spinel/test/module_class_reflection.rb.expected +14 -0
  794. data/vendor/spinel/test/module_const_defined.rb +13 -0
  795. data/vendor/spinel/test/module_const_defined.rb.expected +4 -0
  796. data/vendor/spinel/test/module_cvars.rb +32 -0
  797. data/vendor/spinel/test/module_cvars.rb.expected +4 -0
  798. data/vendor/spinel/test/module_def_self_ivar.rb +14 -0
  799. data/vendor/spinel/test/module_def_self_ivar.rb.expected +2 -0
  800. data/vendor/spinel/test/module_function_dead_method_dce.rb +29 -0
  801. data/vendor/spinel/test/module_function_dead_method_dce.rb.expected +2 -0
  802. data/vendor/spinel/test/module_function_namespace.rb.expected +3 -0
  803. data/vendor/spinel/test/module_function_str_method_param.rb +14 -0
  804. data/vendor/spinel/test/module_function_str_method_param.rb.expected +1 -0
  805. data/vendor/spinel/test/module_ivar_empty_hash_reset.rb +64 -0
  806. data/vendor/spinel/test/module_ivar_empty_hash_reset.rb.expected +7 -0
  807. data/vendor/spinel/test/module_ivar_nil_poly.rb +17 -0
  808. data/vendor/spinel/test/module_ivar_op_write.rb +53 -0
  809. data/vendor/spinel/test/module_ivar_op_write.rb.expected +3 -0
  810. data/vendor/spinel/test/module_reopen_after_include_ivar.rb +33 -0
  811. data/vendor/spinel/test/module_reopen_after_include_ivar.rb.expected +2 -0
  812. data/vendor/spinel/test/module_reopen_after_include_namespaced.rb +33 -0
  813. data/vendor/spinel/test/module_reopen_after_include_namespaced.rb.expected +1 -0
  814. data/vendor/spinel/test/module_reopen_cmeth_redefine.rb +26 -0
  815. data/vendor/spinel/test/module_reopen_cmeth_redefine.rb.expected +2 -0
  816. data/vendor/spinel/test/module_singleton_attr_accessor.rb +41 -0
  817. data/vendor/spinel/test/module_singleton_attr_accessor.rb.expected +4 -0
  818. data/vendor/spinel/test/module_singleton_new_user_method.rb +23 -0
  819. data/vendor/spinel/test/module_singleton_new_user_method.rb.expected +2 -0
  820. data/vendor/spinel/test/module_singleton_self_accessor.rb +31 -0
  821. data/vendor/spinel/test/module_singleton_self_accessor.rb.expected +4 -0
  822. data/vendor/spinel/test/more_truthies_nil_compare.rb +31 -0
  823. data/vendor/spinel/test/more_truthies_nil_compare.rb.expected +9 -0
  824. data/vendor/spinel/test/multi_arg_lambda.rb +31 -0
  825. data/vendor/spinel/test/multi_arg_lambda.rb.expected +6 -0
  826. data/vendor/spinel/test/multi_assign_ivar_type.rb +21 -0
  827. data/vendor/spinel/test/multi_assign_ivar_type.rb.expected +3 -0
  828. data/vendor/spinel/test/multi_write_call_rhs_as_expr.rb +31 -0
  829. data/vendor/spinel/test/multi_write_call_rhs_as_expr.rb.expected +10 -0
  830. data/vendor/spinel/test/multi_write_scalar_rhs.rb +12 -0
  831. data/vendor/spinel/test/multi_write_scalar_rhs.rb.expected +5 -0
  832. data/vendor/spinel/test/mutable_str_alias_uaf.rb +62 -0
  833. data/vendor/spinel/test/mutable_str_alias_uaf.rb.expected +4 -0
  834. data/vendor/spinel/test/mutable_str_force_encoding_return.rb +21 -0
  835. data/vendor/spinel/test/mutable_str_force_encoding_return.rb.expected +1 -0
  836. data/vendor/spinel/test/mutable_str_into_str_array.rb +46 -0
  837. data/vendor/spinel/test/mutable_str_into_str_array.rb.expected +7 -0
  838. data/vendor/spinel/test/mutex_synchronize_block.rb +29 -0
  839. data/vendor/spinel/test/mutex_synchronize_block.rb.expected +6 -0
  840. data/vendor/spinel/test/narrow_and_predicate.rb +23 -0
  841. data/vendor/spinel/test/narrow_and_predicate.rb.expected +1 -0
  842. data/vendor/spinel/test/negative_range_slice.rb +32 -0
  843. data/vendor/spinel/test/negative_range_slice.rb.expected +12 -0
  844. data/vendor/spinel/test/nested_array_eq.rb +22 -0
  845. data/vendor/spinel/test/nested_array_eq.rb.expected +12 -0
  846. data/vendor/spinel/test/nested_yield_with_block_param.rb +33 -0
  847. data/vendor/spinel/test/nil_default_param_widens_to_poly.rb +26 -0
  848. data/vendor/spinel/test/nil_default_param_widens_to_poly.rb.expected +4 -0
  849. data/vendor/spinel/test/nil_guard_narrows_int_or_nil.rb +40 -0
  850. data/vendor/spinel/test/nil_guard_narrows_int_or_nil.rb.expected +5 -0
  851. data/vendor/spinel/test/not_match_op.rb +8 -0
  852. data/vendor/spinel/test/not_match_op.rb.expected +4 -0
  853. data/vendor/spinel/test/nullable_hash_recv_bracket.expected +3 -0
  854. data/vendor/spinel/test/nullable_hash_recv_bracket.rb +33 -0
  855. data/vendor/spinel/test/nullable_obj_nil_compare.rb +92 -0
  856. data/vendor/spinel/test/nullable_obj_nil_compare.rb.expected +8 -0
  857. data/vendor/spinel/test/nullable_poly_hash_arg_unbox.rb +85 -0
  858. data/vendor/spinel/test/nullable_poly_hash_arg_unbox.rb.expected +4 -0
  859. data/vendor/spinel/test/numeric_coerce.rb +24 -0
  860. data/vendor/spinel/test/numeric_coerce.rb.expected +9 -0
  861. data/vendor/spinel/test/obj_class_dispatch.rb +69 -0
  862. data/vendor/spinel/test/obj_class_dispatch.rb.expected +4 -0
  863. data/vendor/spinel/test/object_id_basic.rb +19 -0
  864. data/vendor/spinel/test/object_id_basic.rb.expected +8 -0
  865. data/vendor/spinel/test/object_method_gaps_callee_clone_itself.rb +23 -0
  866. data/vendor/spinel/test/object_method_gaps_callee_clone_itself.rb.expected +7 -0
  867. data/vendor/spinel/test/op_assign_user_operator.rb.expected +2 -0
  868. data/vendor/spinel/test/op_method_bitwise.rb +30 -0
  869. data/vendor/spinel/test/op_method_bitwise.rb.expected +8 -0
  870. data/vendor/spinel/test/op_method_shift.rb +30 -0
  871. data/vendor/spinel/test/op_method_shift.rb.expected +3 -0
  872. data/vendor/spinel/test/open_class_array_builtin.rb +11 -0
  873. data/vendor/spinel/test/open_class_array_builtin.rb.expected +1 -0
  874. data/vendor/spinel/test/open_class_bool_builtin.rb +28 -0
  875. data/vendor/spinel/test/open_class_bool_builtin.rb.expected +6 -0
  876. data/vendor/spinel/test/open_class_default_arg.rb +47 -0
  877. data/vendor/spinel/test/open_class_default_arg.rb.expected +9 -0
  878. data/vendor/spinel/test/open_class_object.rb +26 -0
  879. data/vendor/spinel/test/open_class_object.rb.expected +5 -0
  880. data/vendor/spinel/test/pack_utf8.rb +12 -0
  881. data/vendor/spinel/test/pack_utf8.rb.expected +10 -0
  882. data/vendor/spinel/test/param_body_array_hash_inference.rb +58 -0
  883. data/vendor/spinel/test/param_body_array_hash_inference.rb.expected +3 -0
  884. data/vendor/spinel/test/param_body_hash_inference.rb +72 -0
  885. data/vendor/spinel/test/param_body_hash_inference.rb.expected +6 -0
  886. data/vendor/spinel/test/param_include_body_widen.rb +32 -0
  887. data/vendor/spinel/test/param_include_body_widen.rb.expected +5 -0
  888. data/vendor/spinel/test/param_lengthlike_body_widen.rb +53 -0
  889. data/vendor/spinel/test/param_lengthlike_body_widen.rb.expected +6 -0
  890. data/vendor/spinel/test/param_ptr_from_callee_slot.rb +42 -0
  891. data/vendor/spinel/test/param_ptr_from_callee_slot.rb.expected +6 -0
  892. data/vendor/spinel/test/parser_long_ast_record.rb +132 -0
  893. data/vendor/spinel/test/parser_long_ast_record.rb.expected +3 -0
  894. data/vendor/spinel/test/pattern_match_as_and_guard.rb +33 -0
  895. data/vendor/spinel/test/pattern_match_as_and_guard.rb.expected +4 -0
  896. data/vendor/spinel/test/pattern_match_splat_rest.rb +15 -0
  897. data/vendor/spinel/test/pattern_match_splat_rest.rb.expected +4 -0
  898. data/vendor/spinel/test/pattern_pin.rb +105 -0
  899. data/vendor/spinel/test/pattern_pin.rb.expected +11 -0
  900. data/vendor/spinel/test/poly_arg_int_keyed_hash.rb +42 -0
  901. data/vendor/spinel/test/poly_arg_int_keyed_hash.rb.expected +5 -0
  902. data/vendor/spinel/test/poly_arg_to_typed_method_param.rb +28 -0
  903. data/vendor/spinel/test/poly_arg_to_typed_method_param.rb.expected +4 -0
  904. data/vendor/spinel/test/poly_array_assoc.rb +9 -0
  905. data/vendor/spinel/test/poly_array_compact.rb +15 -0
  906. data/vendor/spinel/test/poly_array_compact.rb.expected +3 -0
  907. data/vendor/spinel/test/poly_array_compact_bang.rb +17 -0
  908. data/vendor/spinel/test/poly_array_compact_bang.rb.expected +3 -0
  909. data/vendor/spinel/test/poly_array_dup.rb +52 -0
  910. data/vendor/spinel/test/poly_array_dup.rb.expected +5 -0
  911. data/vendor/spinel/test/poly_array_flatten.rb +17 -0
  912. data/vendor/spinel/test/poly_array_flatten.rb.expected +4 -0
  913. data/vendor/spinel/test/poly_attr_reader_box_dispatch.expected +1 -0
  914. data/vendor/spinel/test/poly_attr_reader_box_dispatch.rb +35 -0
  915. data/vendor/spinel/test/poly_attr_writer.rb +95 -0
  916. data/vendor/spinel/test/poly_attr_writer.rb.expected +5 -0
  917. data/vendor/spinel/test/poly_class_dispatch.rb +11 -0
  918. data/vendor/spinel/test/poly_class_dispatch.rb.expected +7 -0
  919. data/vendor/spinel/test/poly_dispatch_inherited_attr_reader.rb +20 -0
  920. data/vendor/spinel/test/poly_dispatch_inherited_attr_reader.rb.expected +2 -0
  921. data/vendor/spinel/test/poly_dispatch_inherited_method.rb +19 -0
  922. data/vendor/spinel/test/poly_dispatch_inherited_method.rb.expected +2 -0
  923. data/vendor/spinel/test/poly_dispatch_multilevel_inheritance.rb +28 -0
  924. data/vendor/spinel/test/poly_dispatch_multilevel_inheritance.rb.expected +4 -0
  925. data/vendor/spinel/test/poly_dispatch_narrow_return_type.rb +53 -0
  926. data/vendor/spinel/test/poly_dispatch_narrow_return_type.rb.expected +3 -0
  927. data/vendor/spinel/test/poly_each_receiver_gc_root.rb +40 -0
  928. data/vendor/spinel/test/poly_each_receiver_gc_root.rb.expected +1 -0
  929. data/vendor/spinel/test/poly_gsub_str_arm.rb +24 -0
  930. data/vendor/spinel/test/poly_gsub_str_arm.rb.expected +1 -0
  931. data/vendor/spinel/test/poly_gsub_str_str_hash.rb +37 -0
  932. data/vendor/spinel/test/poly_gsub_str_str_hash.rb.expected +1 -0
  933. data/vendor/spinel/test/poly_idx_int_nullable.rb +14 -0
  934. data/vendor/spinel/test/poly_idx_int_nullable.rb.expected +1 -0
  935. data/vendor/spinel/test/poly_length_string_tag.rb +20 -0
  936. data/vendor/spinel/test/poly_length_string_tag.rb.expected +3 -0
  937. data/vendor/spinel/test/poly_local_is_a_string_narrow_in_non_tail_if.rb +39 -0
  938. data/vendor/spinel/test/poly_local_is_a_string_narrow_in_non_tail_if.rb.expected +1 -0
  939. data/vendor/spinel/test/poly_local_is_a_string_narrow_in_tail_if.rb +23 -0
  940. data/vendor/spinel/test/poly_local_is_a_string_narrow_in_tail_if.rb.expected +1 -0
  941. data/vendor/spinel/test/poly_local_is_a_string_narrow_in_y1_inline.rb +27 -0
  942. data/vendor/spinel/test/poly_local_is_a_string_narrow_in_y1_inline.rb.expected +1 -0
  943. data/vendor/spinel/test/poly_poly_hash_each_value.rb +34 -0
  944. data/vendor/spinel/test/poly_poly_hash_each_value.rb.expected +11 -0
  945. data/vendor/spinel/test/poly_poly_hash_fetch_dup.rb +26 -0
  946. data/vendor/spinel/test/poly_poly_hash_fetch_dup.rb.expected +2 -0
  947. data/vendor/spinel/test/poly_recv_aset_poly_key.rb +30 -0
  948. data/vendor/spinel/test/poly_recv_aset_poly_key.rb.expected +1 -0
  949. data/vendor/spinel/test/poly_recv_dispatch_narrow_module.rb +37 -0
  950. data/vendor/spinel/test/poly_recv_dispatch_narrow_module.rb.expected +3 -0
  951. data/vendor/spinel/test/poly_recv_fetch_arm_incompat.rb +37 -0
  952. data/vendor/spinel/test/poly_recv_fetch_arm_incompat.rb.expected +1 -0
  953. data/vendor/spinel/test/poly_recv_fetch_hash_arms.rb +31 -0
  954. data/vendor/spinel/test/poly_recv_fetch_hash_arms.rb.expected +2 -0
  955. data/vendor/spinel/test/poly_recv_hash_dup.rb +48 -0
  956. data/vendor/spinel/test/poly_recv_hash_each_dispatch.rb +40 -0
  957. data/vendor/spinel/test/poly_recv_hash_each_dispatch.rb.expected +5 -0
  958. data/vendor/spinel/test/poly_recv_map_join.rb +31 -0
  959. data/vendor/spinel/test/poly_recv_map_join.rb.expected +5 -0
  960. data/vendor/spinel/test/poly_recv_range_sym_hash_dispatch.rb +55 -0
  961. data/vendor/spinel/test/poly_recv_range_sym_hash_dispatch.rb.expected +9 -0
  962. data/vendor/spinel/test/poly_recv_two_arg_slice.rb +27 -0
  963. data/vendor/spinel/test/poly_value_into_str_str_hash.rb +44 -0
  964. data/vendor/spinel/test/poly_value_into_str_str_hash.rb.expected +2 -0
  965. data/vendor/spinel/test/prepend_super_basic.rb +18 -0
  966. data/vendor/spinel/test/prepend_super_basic.rb.expected +1 -0
  967. data/vendor/spinel/test/prepend_super_chain.rb +23 -0
  968. data/vendor/spinel/test/prepend_super_chain.rb.expected +1 -0
  969. data/vendor/spinel/test/prepend_super_forward.rb +17 -0
  970. data/vendor/spinel/test/prepend_super_forward.rb.expected +1 -0
  971. data/vendor/spinel/test/prepend_super_multi.rb +25 -0
  972. data/vendor/spinel/test/prepend_super_multi.rb.expected +1 -0
  973. data/vendor/spinel/test/prepend_super_subclass.rb +21 -0
  974. data/vendor/spinel/test/prepend_super_subclass.rb.expected +1 -0
  975. data/vendor/spinel/test/primitive_eq_user_class.rb +84 -0
  976. data/vendor/spinel/test/primitive_eq_user_class.rb.expected +49 -0
  977. data/vendor/spinel/test/proc_anon_dot_call.rb +50 -0
  978. data/vendor/spinel/test/proc_anon_dot_call.rb.expected +5 -0
  979. data/vendor/spinel/test/proc_arg_object.rb +17 -0
  980. data/vendor/spinel/test/proc_arg_object.rb.expected +1 -0
  981. data/vendor/spinel/test/proc_call_value_return.rb +20 -0
  982. data/vendor/spinel/test/proc_call_value_return.rb.expected +5 -0
  983. data/vendor/spinel/test/proc_introspection.rb +11 -0
  984. data/vendor/spinel/test/proc_introspection.rb.expected +6 -0
  985. data/vendor/spinel/test/process_pid.rb +5 -0
  986. data/vendor/spinel/test/process_pid.rb.expected +2 -0
  987. data/vendor/spinel/test/ptr_array_to_poly_array_at_call.rb +39 -0
  988. data/vendor/spinel/test/ptr_array_to_poly_array_at_call.rb.expected +2 -0
  989. data/vendor/spinel/test/public_send.rb +12 -0
  990. data/vendor/spinel/test/public_send.rb.expected +4 -0
  991. data/vendor/spinel/test/puts_class_value.rb +10 -0
  992. data/vendor/spinel/test/puts_class_value.rb.expected +2 -0
  993. data/vendor/spinel/test/puts_nil.rb +7 -0
  994. data/vendor/spinel/test/raise_reraise_in_def.rb +44 -0
  995. data/vendor/spinel/test/raise_unless_isa_narrow.rb +72 -0
  996. data/vendor/spinel/test/raise_unless_isa_narrow.rb.expected +3 -0
  997. data/vendor/spinel/test/range_and_array_range_args.rb +43 -0
  998. data/vendor/spinel/test/range_and_array_range_args.rb.expected +18 -0
  999. data/vendor/spinel/test/range_begin_end_polyarr_include_delete_bang.rb +21 -0
  1000. data/vendor/spinel/test/range_bsearch.rb +11 -0
  1001. data/vendor/spinel/test/range_bsearch.rb.expected +8 -0
  1002. data/vendor/spinel/test/range_case_eq_type_mismatch.rb +10 -0
  1003. data/vendor/spinel/test/range_case_eq_type_mismatch.rb.expected +7 -0
  1004. data/vendor/spinel/test/range_each_fusion.rb +109 -0
  1005. data/vendor/spinel/test/range_each_fusion.rb.expected +16 -0
  1006. data/vendor/spinel/test/range_each_no_block.rb +5 -0
  1007. data/vendor/spinel/test/range_equality.rb +9 -0
  1008. data/vendor/spinel/test/range_exclude_end_size.rb +24 -0
  1009. data/vendor/spinel/test/range_exclude_end_size.rb.expected +18 -0
  1010. data/vendor/spinel/test/range_exclusive_nonliteral.rb +34 -0
  1011. data/vendor/spinel/test/range_overlap_array_flatten_depth.rb +14 -0
  1012. data/vendor/spinel/test/range_overlap_array_flatten_depth.rb.expected +8 -0
  1013. data/vendor/spinel/test/range_step.rb +15 -0
  1014. data/vendor/spinel/test/range_step.rb.expected +5 -0
  1015. data/vendor/spinel/test/range_string_cover.rb +10 -0
  1016. data/vendor/spinel/test/rational_complex_literals.rb +27 -0
  1017. data/vendor/spinel/test/rational_complex_literals.rb.expected +12 -0
  1018. data/vendor/spinel/test/rbs/README.md +45 -0
  1019. data/vendor/spinel/test/rbs/arrays.rbs +10 -0
  1020. data/vendor/spinel/test/rbs/arrays.seed.expected +7 -0
  1021. data/vendor/spinel/test/rbs/dropped_members.rbs +13 -0
  1022. data/vendor/spinel/test/rbs/dropped_members.seed.expected +2 -0
  1023. data/vendor/spinel/test/rbs/dropped_sigs.rbs +14 -0
  1024. data/vendor/spinel/test/rbs/dropped_sigs.seed.expected +2 -0
  1025. data/vendor/spinel/test/rbs/dropped_types.rbs +14 -0
  1026. data/vendor/spinel/test/rbs/dropped_types.seed.expected +2 -0
  1027. data/vendor/spinel/test/rbs/hashes.rbs +11 -0
  1028. data/vendor/spinel/test/rbs/hashes.seed.expected +7 -0
  1029. data/vendor/spinel/test/rbs/ivars.rbs +8 -0
  1030. data/vendor/spinel/test/rbs/ivars.seed.expected +5 -0
  1031. data/vendor/spinel/test/rbs/members.rbs +7 -0
  1032. data/vendor/spinel/test/rbs/members.seed.expected +5 -0
  1033. data/vendor/spinel/test/rbs/nominal.rbs +7 -0
  1034. data/vendor/spinel/test/rbs/nominal.seed.expected +3 -0
  1035. data/vendor/spinel/test/rbs/nullable.rbs +8 -0
  1036. data/vendor/spinel/test/rbs/nullable.seed.expected +5 -0
  1037. data/vendor/spinel/test/rbs/overloads.rbs +13 -0
  1038. data/vendor/spinel/test/rbs/overloads.seed.expected +3 -0
  1039. data/vendor/spinel/test/rbs/scalars.rbs +12 -0
  1040. data/vendor/spinel/test/rbs/scalars.seed.expected +9 -0
  1041. data/vendor/spinel/test/rbs/union_poly.rbs +9 -0
  1042. data/vendor/spinel/test/rbs/union_poly.seed.expected +4 -0
  1043. data/vendor/spinel/test/rbs/unqualified.rbs +13 -0
  1044. data/vendor/spinel/test/rbs/unqualified.seed.expected +4 -0
  1045. data/vendor/spinel/test/recursive_block_forward_value.rb +19 -0
  1046. data/vendor/spinel/test/recursive_block_forward_value.rb.expected +3 -0
  1047. data/vendor/spinel/test/recursive_implicit_yield_value.rb +35 -0
  1048. data/vendor/spinel/test/recursive_implicit_yield_value.rb.expected +7 -0
  1049. data/vendor/spinel/test/regex.rb +7 -0
  1050. data/vendor/spinel/test/regex.rb.expected +2 -0
  1051. data/vendor/spinel/test/regex_backref_oob_nil.rb +13 -0
  1052. data/vendor/spinel/test/regex_backref_oob_nil.rb.expected +5 -0
  1053. data/vendor/spinel/test/regex_const_freeze.rb +17 -0
  1054. data/vendor/spinel/test/regex_const_freeze.rb.expected +3 -0
  1055. data/vendor/spinel/test/regex_hex_shorthand.rb +13 -0
  1056. data/vendor/spinel/test/regex_hex_shorthand.rb.expected +12 -0
  1057. data/vendor/spinel/test/regex_match_nonstring.rb +18 -0
  1058. data/vendor/spinel/test/regex_match_nonstring.rb.expected +3 -0
  1059. data/vendor/spinel/test/regex_namespaced_const.rb +17 -0
  1060. data/vendor/spinel/test/regex_namespaced_const.rb.expected +4 -0
  1061. data/vendor/spinel/test/regex_negated_shorthand_toplevel.rb +9 -0
  1062. data/vendor/spinel/test/regex_negated_shorthand_toplevel.rb.expected +13 -0
  1063. data/vendor/spinel/test/regex_sub_backref.rb +11 -0
  1064. data/vendor/spinel/test/regex_unanchored_class_seq.rb +13 -0
  1065. data/vendor/spinel/test/regex_unanchored_class_seq.rb.expected +6 -0
  1066. data/vendor/spinel/test/regexp_capture_ivar_hash.rb +48 -0
  1067. data/vendor/spinel/test/regexp_capture_ivar_hash.rb.expected +7 -0
  1068. data/vendor/spinel/test/regexp_error_catchable.rb +14 -0
  1069. data/vendor/spinel/test/regexp_error_catchable.rb.expected +3 -0
  1070. data/vendor/spinel/test/regexp_gsub_zero_width.rb +27 -0
  1071. data/vendor/spinel/test/regexp_gsub_zero_width.rb.expected +12 -0
  1072. data/vendor/spinel/test/regexp_last_match_capture.rb +21 -0
  1073. data/vendor/spinel/test/regexp_last_match_capture.rb.expected +7 -0
  1074. data/vendor/spinel/test/regexp_line_anchors.rb +34 -0
  1075. data/vendor/spinel/test/regexp_line_anchors.rb.expected +15 -0
  1076. data/vendor/spinel/test/regexp_local_if_else_union.rb +36 -0
  1077. data/vendor/spinel/test/regexp_local_if_else_union.rb.expected +5 -0
  1078. data/vendor/spinel/test/regexp_match_data.rb +17 -0
  1079. data/vendor/spinel/test/regexp_match_data.rb.expected +8 -0
  1080. data/vendor/spinel/test/regexp_match_p_position.rb +7 -0
  1081. data/vendor/spinel/test/regexp_match_p_position.rb.expected +4 -0
  1082. data/vendor/spinel/test/regexp_new_literal.rb +72 -0
  1083. data/vendor/spinel/test/regexp_new_literal.rb.expected +24 -0
  1084. data/vendor/spinel/test/regexp_source_options.rb +10 -0
  1085. data/vendor/spinel/test/regexp_source_options.rb.expected +5 -0
  1086. data/vendor/spinel/test/regexp_sub_gsub_length.rb +17 -0
  1087. data/vendor/spinel/test/regexp_sub_gsub_length.rb.expected +10 -0
  1088. data/vendor/spinel/test/regexp_sub_gsub_realloc.rb +25 -0
  1089. data/vendor/spinel/test/regexp_sub_gsub_realloc.rb.expected +6 -0
  1090. data/vendor/spinel/test/regexp_threeq.rb +15 -0
  1091. data/vendor/spinel/test/regexp_threeq.rb.expected +4 -0
  1092. data/vendor/spinel/test/require_first_line.rb +7 -0
  1093. data/vendor/spinel/test/require_first_line.rb.expected +1 -0
  1094. data/vendor/spinel/test/require_modifier.rb +12 -0
  1095. data/vendor/spinel/test/require_same_line.rb +5 -0
  1096. data/vendor/spinel/test/require_same_line.rb.expected +2 -0
  1097. data/vendor/spinel/test/require_unsupported_lib.rb +8 -0
  1098. data/vendor/spinel/test/require_unsupported_lib.rb.expected +2 -0
  1099. data/vendor/spinel/test/rescue_bind_in_fiber_body.rb +24 -0
  1100. data/vendor/spinel/test/rescue_bind_in_fiber_body.rb.expected +6 -0
  1101. data/vendor/spinel/test/rescue_bind_in_lambda_proc_body.rb +16 -0
  1102. data/vendor/spinel/test/rescue_bind_in_lambda_proc_body.rb.expected +4 -0
  1103. data/vendor/spinel/test/rescue_walks_class_hierarchy.rb +37 -0
  1104. data/vendor/spinel/test/rescue_walks_class_hierarchy.rb.expected +7 -0
  1105. data/vendor/spinel/test/rescue_widens_nil_local_to_exception.expected +1 -0
  1106. data/vendor/spinel/test/rescue_widens_nil_local_to_exception.rb +11 -0
  1107. data/vendor/spinel/test/respond_to_def_self_method.rb +14 -0
  1108. data/vendor/spinel/test/respond_to_module_singleton_accessor.rb +10 -0
  1109. data/vendor/spinel/test/respond_to_module_singleton_accessor.rb.expected +3 -0
  1110. data/vendor/spinel/test/respond_to_primitive.rb +9 -0
  1111. data/vendor/spinel/test/respond_to_primitive.rb.expected +5 -0
  1112. data/vendor/spinel/test/return_unify_int_vs_pointer.rb +37 -0
  1113. data/vendor/spinel/test/return_unify_int_vs_pointer.rb.expected +4 -0
  1114. data/vendor/spinel/test/return_unify_isa_early_return.rb +29 -0
  1115. data/vendor/spinel/test/return_unify_isa_early_return.rb.expected +2 -0
  1116. data/vendor/spinel/test/rightward_assign_destructure.rb +27 -0
  1117. data/vendor/spinel/test/rightward_assign_destructure.rb.expected +8 -0
  1118. data/vendor/spinel/test/safe_navigation_returns_nil.expected +6 -0
  1119. data/vendor/spinel/test/safe_navigation_returns_nil.rb +28 -0
  1120. data/vendor/spinel/test/same_named_attr_no_widen.rb +24 -0
  1121. data/vendor/spinel/test/same_named_attr_no_widen.rb.expected +1 -0
  1122. data/vendor/spinel/test/scan_locals_def_boundary.rb +58 -0
  1123. data/vendor/spinel/test/scan_locals_def_boundary.rb.expected +2 -0
  1124. data/vendor/spinel/test/scan_walkers_def_boundary.rb +52 -0
  1125. data/vendor/spinel/test/scan_walkers_def_boundary.rb.expected +4 -0
  1126. data/vendor/spinel/test/self_class_divergent_returns.rb +61 -0
  1127. data/vendor/spinel/test/self_class_divergent_returns.rb.expected +3 -0
  1128. data/vendor/spinel/test/self_class_new_construction.rb +16 -0
  1129. data/vendor/spinel/test/self_class_new_construction.rb.expected +2 -0
  1130. data/vendor/spinel/test/self_operator_subclass_dispatch.rb +40 -0
  1131. data/vendor/spinel/test/self_operator_subclass_dispatch.rb.expected +2 -0
  1132. data/vendor/spinel/test/signal_trap_stub.rb +30 -0
  1133. data/vendor/spinel/test/signal_trap_stub.rb.expected +3 -0
  1134. data/vendor/spinel/test/sort_min_max_block_comparator.rb +18 -0
  1135. data/vendor/spinel/test/sort_min_max_block_comparator.rb.expected +7 -0
  1136. data/vendor/spinel/test/source_encoding.rb +19 -0
  1137. data/vendor/spinel/test/source_encoding.rb.expected +9 -0
  1138. data/vendor/spinel/test/sp_crypto_basic.rb +45 -0
  1139. data/vendor/spinel/test/sp_crypto_basic.rb.expected +6 -0
  1140. data/vendor/spinel/test/sp_crypto_sha1.rb +18 -0
  1141. data/vendor/spinel/test/sp_crypto_sha1.rb.expected +3 -0
  1142. data/vendor/spinel/test/sp_net_basic.rb +17 -0
  1143. data/vendor/spinel/test/sp_net_basic.rb.expected +2 -0
  1144. data/vendor/spinel/test/splat_heterogeneous_call.rb +14 -0
  1145. data/vendor/spinel/test/splat_params_instance.rb +21 -0
  1146. data/vendor/spinel/test/splat_params_instance.rb.expected +8 -0
  1147. data/vendor/spinel/test/sprintf_long_interp.rb +23 -0
  1148. data/vendor/spinel/test/sprintf_long_interp.rb.expected +3 -0
  1149. data/vendor/spinel/test/stdlib_class_in_ivar.rb +85 -0
  1150. data/vendor/spinel/test/stdlib_class_in_ivar.rb.expected +7 -0
  1151. data/vendor/spinel/test/str_array_max_min_by.rb +6 -0
  1152. data/vendor/spinel/test/str_array_sort_by.rb +11 -0
  1153. data/vendor/spinel/test/str_array_sort_by.rb.expected +5 -0
  1154. data/vendor/spinel/test/str_chomp_paragraph_mode.rb +16 -0
  1155. data/vendor/spinel/test/str_chomp_paragraph_mode.rb.expected +9 -0
  1156. data/vendor/spinel/test/str_count_multi_arg.rb +11 -0
  1157. data/vendor/spinel/test/str_count_multi_arg.rb.expected +4 -0
  1158. data/vendor/spinel/test/str_delete_count_negation.rb +16 -0
  1159. data/vendor/spinel/test/str_delete_count_negation.rb.expected +6 -0
  1160. data/vendor/spinel/test/str_force_encoding_return.rb +26 -0
  1161. data/vendor/spinel/test/str_force_encoding_return.rb.expected +3 -0
  1162. data/vendor/spinel/test/str_int_hash_missing_key_nil.rb +16 -0
  1163. data/vendor/spinel/test/str_int_hash_missing_key_nil.rb.expected +10 -0
  1164. data/vendor/spinel/test/str_match_position.rb +15 -0
  1165. data/vendor/spinel/test/str_match_position.rb.expected +8 -0
  1166. data/vendor/spinel/test/str_method_nil_arg_no_segv.rb +47 -0
  1167. data/vendor/spinel/test/str_method_nil_arg_no_segv.rb.expected +7 -0
  1168. data/vendor/spinel/test/str_oct_prefix.rb +11 -0
  1169. data/vendor/spinel/test/str_oct_prefix.rb.expected +5 -0
  1170. data/vendor/spinel/test/str_ord_empty.rb +11 -0
  1171. data/vendor/spinel/test/str_ord_empty.rb.expected +3 -0
  1172. data/vendor/spinel/test/str_poly_hash_dup_widen.rb +21 -0
  1173. data/vendor/spinel/test/str_poly_hash_dup_widen.rb.expected +4 -0
  1174. data/vendor/spinel/test/str_poly_hash_dup_widen_from_int.rb +17 -0
  1175. data/vendor/spinel/test/str_poly_hash_dup_widen_from_int.rb.expected +3 -0
  1176. data/vendor/spinel/test/str_rindex_position.rb +23 -0
  1177. data/vendor/spinel/test/str_rindex_position.rb.expected +17 -0
  1178. data/vendor/spinel/test/str_split_space_whitespace.rb +10 -0
  1179. data/vendor/spinel/test/str_split_space_whitespace.rb.expected +4 -0
  1180. data/vendor/spinel/test/str_split_trailing_empty.rb +12 -0
  1181. data/vendor/spinel/test/str_split_trailing_empty.rb.expected +7 -0
  1182. data/vendor/spinel/test/str_squeeze_arg.rb +18 -0
  1183. data/vendor/spinel/test/str_squeeze_arg.rb.expected +7 -0
  1184. data/vendor/spinel/test/str_str_hash_nullable_bracket_assign.rb +39 -0
  1185. data/vendor/spinel/test/str_str_hash_nullable_bracket_assign.rb.expected +5 -0
  1186. data/vendor/spinel/test/str_to_i_overflow.rb +32 -0
  1187. data/vendor/spinel/test/str_to_i_overflow.rb.expected +6 -0
  1188. data/vendor/spinel/test/str_tr_negation.rb +10 -0
  1189. data/vendor/spinel/test/str_tr_negation.rb.expected +4 -0
  1190. data/vendor/spinel/test/string_byteslice.rb +9 -0
  1191. data/vendor/spinel/test/string_byteslice.rb.expected +6 -0
  1192. data/vendor/spinel/test/string_casecmp.rb +9 -0
  1193. data/vendor/spinel/test/string_casecmp.rb.expected +7 -0
  1194. data/vendor/spinel/test/string_charset_range_notation.rb +9 -0
  1195. data/vendor/spinel/test/string_charset_range_notation.rb.expected +5 -0
  1196. data/vendor/spinel/test/string_chomp_bang_mutates.rb +20 -0
  1197. data/vendor/spinel/test/string_chomp_bang_mutates.rb.expected +4 -0
  1198. data/vendor/spinel/test/string_crypt.rb +22 -0
  1199. data/vendor/spinel/test/string_crypt.rb.expected +7 -0
  1200. data/vendor/spinel/test/string_delete_prefix_suffix_bang.rb +29 -0
  1201. data/vendor/spinel/test/string_delete_prefix_suffix_bang.rb.expected +5 -0
  1202. data/vendor/spinel/test/string_each_char_returns_self.rb +15 -0
  1203. data/vendor/spinel/test/string_each_line_expr.rb +25 -0
  1204. data/vendor/spinel/test/string_each_line_expr.rb.expected +19 -0
  1205. data/vendor/spinel/test/string_each_line_keeps_newline.rb +15 -0
  1206. data/vendor/spinel/test/string_encoding.rb +8 -0
  1207. data/vendor/spinel/test/string_encoding.rb.expected +5 -0
  1208. data/vendor/spinel/test/string_enum_block_returns_self.rb +27 -0
  1209. data/vendor/spinel/test/string_enum_block_returns_self.rb.expected +11 -0
  1210. data/vendor/spinel/test/string_format_polyarr.rb +6 -0
  1211. data/vendor/spinel/test/string_frozen_mutation_raises.rb +27 -0
  1212. data/vendor/spinel/test/string_frozen_mutation_raises.rb.expected +4 -0
  1213. data/vendor/spinel/test/string_gsub_block.rb +8 -0
  1214. data/vendor/spinel/test/string_index_nil_typeerror.rb +9 -0
  1215. data/vendor/spinel/test/string_index_nil_typeerror.rb.expected +1 -0
  1216. data/vendor/spinel/test/string_index_regex.rb +9 -0
  1217. data/vendor/spinel/test/string_index_regex.rb.expected +6 -0
  1218. data/vendor/spinel/test/string_lshift_int_codepoint.rb +9 -0
  1219. data/vendor/spinel/test/string_lshift_int_codepoint.rb.expected +2 -0
  1220. data/vendor/spinel/test/string_multiply_overflow.rb +14 -0
  1221. data/vendor/spinel/test/string_multiply_overflow.rb.expected +4 -0
  1222. data/vendor/spinel/test/string_nil_arg_typeerror.rb +38 -0
  1223. data/vendor/spinel/test/string_nil_arg_typeerror.rb.expected +5 -0
  1224. data/vendor/spinel/test/string_param_inference_from_body.rb +40 -0
  1225. data/vendor/spinel/test/string_param_inference_from_body.rb.expected +3 -0
  1226. data/vendor/spinel/test/string_partition_regex_and_puts.rb +8 -0
  1227. data/vendor/spinel/test/string_partition_regex_and_puts.rb.expected +6 -0
  1228. data/vendor/spinel/test/string_range_to_a.rb +10 -0
  1229. data/vendor/spinel/test/string_range_to_a.rb.expected +4 -0
  1230. data/vendor/spinel/test/string_replace_prepend_insert_clear.rb +34 -0
  1231. data/vendor/spinel/test/string_rpartition_regex.rb +10 -0
  1232. data/vendor/spinel/test/string_scanner_basic.rb +35 -0
  1233. data/vendor/spinel/test/string_scanner_check_unscan.rb +24 -0
  1234. data/vendor/spinel/test/string_scanner_getch_utf8.rb +26 -0
  1235. data/vendor/spinel/test/string_scanner_nullable.rb +75 -0
  1236. data/vendor/spinel/test/string_scanner_nullable.rb.expected +37 -0
  1237. data/vendor/spinel/test/string_scanner_scan_to_local.rb +11 -0
  1238. data/vendor/spinel/test/string_scanner_unscan_error.rb +54 -0
  1239. data/vendor/spinel/test/string_scrub.rb +7 -0
  1240. data/vendor/spinel/test/string_slice_range.rb +18 -0
  1241. data/vendor/spinel/test/string_split_capture.rb +8 -0
  1242. data/vendor/spinel/test/string_split_inline_arg_gc_root.rb +77 -0
  1243. data/vendor/spinel/test/string_split_inline_arg_gc_root.rb.expected +1 -0
  1244. data/vendor/spinel/test/string_squeeze_no_trailing_nul.rb +12 -0
  1245. data/vendor/spinel/test/string_sub_hash_replacement.rb +8 -0
  1246. data/vendor/spinel/test/string_to_i_base.rb +9 -0
  1247. data/vendor/spinel/test/string_to_i_base.rb.expected +6 -0
  1248. data/vendor/spinel/test/string_to_i_base_zero.rb +9 -0
  1249. data/vendor/spinel/test/string_to_i_overflow_raises.rb +30 -0
  1250. data/vendor/spinel/test/string_to_i_overflow_raises.rb.expected +6 -0
  1251. data/vendor/spinel/test/string_undump.rb +9 -0
  1252. data/vendor/spinel/test/string_upto.rb +20 -0
  1253. data/vendor/spinel/test/string_with_embedded_nul.rb +46 -0
  1254. data/vendor/spinel/test/string_with_embedded_nul.rb.expected +16 -0
  1255. data/vendor/spinel/test/stringio_new_mode.rb +21 -0
  1256. data/vendor/spinel/test/stringio_new_mode.rb.expected +5 -0
  1257. data/vendor/spinel/test/stringio_new_nil.rb +14 -0
  1258. data/vendor/spinel/test/stringio_new_nil.rb.expected +2 -0
  1259. data/vendor/spinel/test/stringio_open.rb +30 -0
  1260. data/vendor/spinel/test/stringio_open.rb.expected +10 -0
  1261. data/vendor/spinel/test/stringio_putc_fsync.rb +24 -0
  1262. data/vendor/spinel/test/stringio_putc_fsync.rb.expected +3 -0
  1263. data/vendor/spinel/test/strip_nul.rb +13 -0
  1264. data/vendor/spinel/test/strip_nul.rb.expected +8 -0
  1265. data/vendor/spinel/test/struct_dig.rb +16 -0
  1266. data/vendor/spinel/test/struct_int_member_unboxed.rb +14 -0
  1267. data/vendor/spinel/test/struct_int_member_unboxed.rb.expected +6 -0
  1268. data/vendor/spinel/test/struct_member_name_no_global_merge.rb +28 -0
  1269. data/vendor/spinel/test/struct_member_name_no_global_merge.rb.expected +3 -0
  1270. data/vendor/spinel/test/struct_to_a_values.rb +12 -0
  1271. data/vendor/spinel/test/struct_to_a_values.rb.expected +6 -0
  1272. data/vendor/spinel/test/struct_to_h.rb +8 -0
  1273. data/vendor/spinel/test/struct_to_h.rb.expected +4 -0
  1274. data/vendor/spinel/test/struct_to_h_block.rb +30 -0
  1275. data/vendor/spinel/test/super_in_non_initialize.rb +44 -0
  1276. data/vendor/spinel/test/super_in_non_initialize.rb.expected +3 -0
  1277. data/vendor/spinel/test/super_with_args.rb +25 -0
  1278. data/vendor/spinel/test/super_with_args.rb.expected +4 -0
  1279. data/vendor/spinel/test/sym_hash_cross_variant_merge.rb +40 -0
  1280. data/vendor/spinel/test/sym_hash_cross_variant_merge.rb.expected +3 -0
  1281. data/vendor/spinel/test/sym_int_hash_merge.rb +52 -0
  1282. data/vendor/spinel/test/sym_int_hash_merge.rb.expected +11 -0
  1283. data/vendor/spinel/test/sym_int_hash_missing_key_nil.rb +15 -0
  1284. data/vendor/spinel/test/sym_int_hash_missing_key_nil.rb.expected +11 -0
  1285. data/vendor/spinel/test/sym_poly_hash_merge_sym_int.rb +18 -0
  1286. data/vendor/spinel/test/sym_poly_hash_merge_sym_int.rb.expected +4 -0
  1287. data/vendor/spinel/test/symbol_id2name_ruby_desc_minmax.rb +13 -0
  1288. data/vendor/spinel/test/symbol_id2name_ruby_desc_minmax.rb.expected +7 -0
  1289. data/vendor/spinel/test/symbol_to_proc_after_positional.rb +18 -0
  1290. data/vendor/spinel/test/symbol_to_proc_after_positional.rb.expected +5 -0
  1291. data/vendor/spinel/test/symbol_upcase_interpolation.rb +24 -0
  1292. data/vendor/spinel/test/symbol_upcase_interpolation.rb.expected +5 -0
  1293. data/vendor/spinel/test/system_argument_list.rb +15 -0
  1294. data/vendor/spinel/test/system_argument_list.rb.expected +7 -0
  1295. data/vendor/spinel/test/thread_new_value.rb +5 -0
  1296. data/vendor/spinel/test/thread_new_value.rb.expected +2 -0
  1297. data/vendor/spinel/test/time_localtime_gmtime.rb +19 -0
  1298. data/vendor/spinel/test/time_mktime_local_utc.rb +24 -0
  1299. data/vendor/spinel/test/time_mktime_local_utc.rb.expected +13 -0
  1300. data/vendor/spinel/test/time_strftime_long_format.rb +21 -0
  1301. data/vendor/spinel/test/time_strftime_long_format.rb.expected +5 -0
  1302. data/vendor/spinel/test/time_subsec_utc.rb +19 -0
  1303. data/vendor/spinel/test/time_subsec_utc.rb.expected +9 -0
  1304. data/vendor/spinel/test/time_to_s.rb +5 -0
  1305. data/vendor/spinel/test/toplevel_include_module_function.rb +101 -0
  1306. data/vendor/spinel/test/toplevel_include_module_function.rb.expected +8 -0
  1307. data/vendor/spinel/test/toplevel_kwrest_block_param.rb +19 -0
  1308. data/vendor/spinel/test/toplevel_kwrest_block_param.rb.expected +2 -0
  1309. data/vendor/spinel/test/tuple_inspect.rb +9 -0
  1310. data/vendor/spinel/test/tuple_inspect.rb.expected +4 -0
  1311. data/vendor/spinel/test/typed_array_empty_returns_nil.rb +19 -0
  1312. data/vendor/spinel/test/typed_array_empty_returns_nil.rb.expected +8 -0
  1313. data/vendor/spinel/test/typed_array_include_cross_type.rb +6 -0
  1314. data/vendor/spinel/test/typed_hash_caller_no_body_widen.rb +46 -0
  1315. data/vendor/spinel/test/typed_hash_caller_no_body_widen.rb.expected +1 -0
  1316. data/vendor/spinel/test/typed_hash_inspect_and_each_value.rb +12 -0
  1317. data/vendor/spinel/test/typed_hash_inspect_and_each_value.rb.expected +6 -0
  1318. data/vendor/spinel/test/typed_hash_missing_returns_nil.rb +17 -0
  1319. data/vendor/spinel/test/typed_hash_missing_returns_nil.rb.expected +4 -0
  1320. data/vendor/spinel/test/unary_operator_methods.rb +19 -0
  1321. data/vendor/spinel/test/unary_operator_methods.rb.expected +3 -0
  1322. data/vendor/spinel/test/undef_method_raises.rb +34 -0
  1323. data/vendor/spinel/test/undef_method_raises.rb.expected +3 -0
  1324. data/vendor/spinel/test/uninit_const_raises_nameerror.rb +18 -0
  1325. data/vendor/spinel/test/uninit_ivar_returns_nil.rb +23 -0
  1326. data/vendor/spinel/test/uninit_ivar_returns_nil.rb.expected +4 -0
  1327. data/vendor/spinel/test/unless_return_path_hash.rb +39 -0
  1328. data/vendor/spinel/test/unless_return_path_hash.rb.expected +6 -0
  1329. data/vendor/spinel/test/user_class_aset_dispatch.rb +75 -0
  1330. data/vendor/spinel/test/user_class_aset_dispatch.rb.expected +3 -0
  1331. data/vendor/spinel/test/value_type_tuple_gc_scan.rb +28 -0
  1332. data/vendor/spinel/test/value_type_tuple_gc_scan.rb.expected +2 -0
  1333. data/vendor/spinel/test/values_at.rb +19 -0
  1334. data/vendor/spinel/test/values_at.rb.expected +4 -0
  1335. data/vendor/spinel/test/volatile_strip_skips_coerced_arg.expected +1 -0
  1336. data/vendor/spinel/test/volatile_strip_skips_coerced_arg.rb +30 -0
  1337. data/vendor/spinel/test/warn_kernel.rb +13 -0
  1338. data/vendor/spinel/test/warn_kernel.rb.expected +3 -0
  1339. data/vendor/spinel/test/warn_unresolved_call_context.rb +20 -0
  1340. data/vendor/spinel/test/when_splat_rational_complex.rb +30 -0
  1341. data/vendor/spinel/test/when_splat_rational_complex.rb.expected +6 -0
  1342. data/vendor/spinel/test/yield_call_assigned_return.rb +41 -0
  1343. data/vendor/spinel/test/yield_call_assigned_return.rb.expected +6 -0
  1344. data/vendor/spinel/test/yield_typed_hash_block_local.rb +41 -0
  1345. data/vendor/spinel/test/yield_typed_hash_block_local.rb.expected +2 -0
  1346. data/vendor/spinel/test/yield_value_return.rb +52 -0
  1347. data/vendor/spinel/test/yield_value_return.rb.expected +8 -0
  1348. data/vendor/spinel/test/yield_value_returns_from_method.expected +6 -0
  1349. data/vendor/spinel/test/yield_value_returns_from_method.rb +27 -0
  1350. data/vendor/spinel/tools/fast-bootstrap +74 -0
  1351. metadata +1326 -279
  1352. data/vendor/spinel/test/alias_method.rb +0 -28
  1353. data/vendor/spinel/test/alias_method.rb.expected +0 -5
  1354. data/vendor/spinel/test/and_node_poly_operand.rb +0 -24
  1355. data/vendor/spinel/test/array_3d_nested.rb +0 -48
  1356. data/vendor/spinel/test/array_clear_typed.rb +0 -40
  1357. data/vendor/spinel/test/array_clear_typed.rb.expected +0 -7
  1358. data/vendor/spinel/test/array_concat.rb +0 -18
  1359. data/vendor/spinel/test/array_concat.rb.expected +0 -2
  1360. data/vendor/spinel/test/array_each_with_object.rb +0 -17
  1361. data/vendor/spinel/test/array_flat_map.rb +0 -16
  1362. data/vendor/spinel/test/array_flat_map.rb.expected +0 -2
  1363. data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb +0 -29
  1364. data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb.expected +0 -6
  1365. data/vendor/spinel/test/array_method_name_clash.rb +0 -15
  1366. data/vendor/spinel/test/array_new_block_typed_container.rb +0 -37
  1367. data/vendor/spinel/test/array_new_block_typed_container.rb.expected +0 -7
  1368. data/vendor/spinel/test/array_new_empty_inner_deferred.rb +0 -47
  1369. data/vendor/spinel/test/array_new_empty_inner_deferred.rb.expected +0 -8
  1370. data/vendor/spinel/test/array_partition_gc.rb +0 -20
  1371. data/vendor/spinel/test/array_partition_gc.rb.expected +0 -3
  1372. data/vendor/spinel/test/array_plus.rb +0 -18
  1373. data/vendor/spinel/test/array_plus.rb.expected +0 -2
  1374. data/vendor/spinel/test/array_rotate_bang.rb +0 -54
  1375. data/vendor/spinel/test/array_rotate_bang.rb.expected +0 -34
  1376. data/vendor/spinel/test/array_shuffle_ptr.rb +0 -11
  1377. data/vendor/spinel/test/attr_writer_poly_box.rb +0 -24
  1378. data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb +0 -29
  1379. data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb.expected +0 -3
  1380. data/vendor/spinel/test/attr_writer_returns_rhs.rb +0 -23
  1381. data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb +0 -38
  1382. data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb.expected +0 -3
  1383. data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb +0 -36
  1384. data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb.expected +0 -2
  1385. data/vendor/spinel/test/bare_return_in_cls_method.rb +0 -46
  1386. data/vendor/spinel/test/bare_return_in_cls_method.rb.expected +0 -2
  1387. data/vendor/spinel/test/bare_return_in_poly_method.rb +0 -26
  1388. data/vendor/spinel/test/bare_return_in_poly_method.rb.expected +0 -2
  1389. data/vendor/spinel/test/bound_method_array.rb +0 -22
  1390. data/vendor/spinel/test/bound_method_array.rb.expected +0 -4
  1391. data/vendor/spinel/test/bound_method_basic.rb +0 -27
  1392. data/vendor/spinel/test/bound_method_basic.rb.expected +0 -2
  1393. data/vendor/spinel/test/call_op_write.rb +0 -51
  1394. data/vendor/spinel/test/call_op_write.rb.expected +0 -11
  1395. data/vendor/spinel/test/chained_attr_setter.rb +0 -55
  1396. data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb +0 -28
  1397. data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb.expected +0 -3
  1398. data/vendor/spinel/test/chained_ivar_write_split.rb +0 -26
  1399. data/vendor/spinel/test/chained_ivar_write_split.rb.expected +0 -3
  1400. data/vendor/spinel/test/chained_ivar_write_subclass.rb +0 -26
  1401. data/vendor/spinel/test/chained_ivar_write_subclass.rb.expected +0 -2
  1402. data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb +0 -32
  1403. data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb.expected +0 -3
  1404. data/vendor/spinel/test/chained_or_assign_collection_element.rb +0 -29
  1405. data/vendor/spinel/test/chained_or_assign_collection_element.rb.expected +0 -2
  1406. data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb +0 -25
  1407. data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb.expected +0 -3
  1408. data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb +0 -24
  1409. data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb.expected +0 -3
  1410. data/vendor/spinel/test/class_constant_sym_array.rb +0 -19
  1411. data/vendor/spinel/test/class_var_write.rb +0 -19
  1412. data/vendor/spinel/test/cls_ivar_type_parent_defer.rb +0 -32
  1413. data/vendor/spinel/test/cls_method_object.rb +0 -31
  1414. data/vendor/spinel/test/cls_method_object.rb.expected +0 -2
  1415. data/vendor/spinel/test/comparable.rb +0 -21
  1416. data/vendor/spinel/test/comparable.rb.expected +0 -5
  1417. data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb +0 -32
  1418. data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb +0 -43
  1419. data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb.expected +0 -2
  1420. data/vendor/spinel/test/each_with_object_seed_shadow.rb +0 -14
  1421. data/vendor/spinel/test/each_with_object_seed_shadow.rb.expected +0 -4
  1422. data/vendor/spinel/test/empty_hash_ivar_string_value.rb +0 -51
  1423. data/vendor/spinel/test/empty_hash_ivar_string_value.rb.expected +0 -4
  1424. data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb +0 -19
  1425. data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb.expected +0 -1
  1426. data/vendor/spinel/test/ensure_runs_on_raise.rb +0 -32
  1427. data/vendor/spinel/test/ensure_runs_on_raise.rb.expected +0 -3
  1428. data/vendor/spinel/test/ensure_runs_on_raise_nested.rb +0 -38
  1429. data/vendor/spinel/test/ensure_runs_on_raise_nested.rb.expected +0 -4
  1430. data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb +0 -26
  1431. data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb.expected +0 -2
  1432. data/vendor/spinel/test/ensure_runs_on_return_nested.rb +0 -37
  1433. data/vendor/spinel/test/ensure_runs_on_return_nested.rb.expected +0 -3
  1434. data/vendor/spinel/test/enumerable.rb +0 -19
  1435. data/vendor/spinel/test/enumerable.rb.expected +0 -2
  1436. data/vendor/spinel/test/exceptions.rb +0 -34
  1437. data/vendor/spinel/test/exceptions.rb.expected +0 -4
  1438. data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb +0 -22
  1439. data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb.expected +0 -3
  1440. data/vendor/spinel/test/fiber_yield_across_method_call.rb +0 -28
  1441. data/vendor/spinel/test/fiber_yield_across_method_call.rb.expected +0 -3
  1442. data/vendor/spinel/test/file_class_methods_int_recv.rb +0 -20
  1443. data/vendor/spinel/test/file_class_methods_int_recv.rb.expected +0 -3
  1444. data/vendor/spinel/test/float_array_sort.rb +0 -18
  1445. data/vendor/spinel/test/float_array_sort.rb.expected +0 -8
  1446. data/vendor/spinel/test/forward_call_class_method_inherited_init.rb +0 -36
  1447. data/vendor/spinel/test/forward_call_class_method_inherited_init.rb.expected +0 -1
  1448. data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb +0 -32
  1449. data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb +0 -41
  1450. data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb.expected +0 -1
  1451. data/vendor/spinel/test/forward_call_class_method_int_array.rb +0 -26
  1452. data/vendor/spinel/test/forward_call_class_method_int_array.rb.expected +0 -1
  1453. data/vendor/spinel/test/forward_call_class_method_nested.rb +0 -35
  1454. data/vendor/spinel/test/forward_call_class_method_obj.rb +0 -36
  1455. data/vendor/spinel/test/forward_call_class_method_obj.rb.expected +0 -1
  1456. data/vendor/spinel/test/forward_call_param_type_int_array.rb +0 -34
  1457. data/vendor/spinel/test/forward_call_param_type_int_array.rb.expected +0 -1
  1458. data/vendor/spinel/test/forward_call_param_type_obj.rb +0 -38
  1459. data/vendor/spinel/test/forward_call_param_type_obj.rb.expected +0 -1
  1460. data/vendor/spinel/test/gc_save_double_in_new.rb +0 -13
  1461. data/vendor/spinel/test/gc_save_double_in_new.rb.expected +0 -1
  1462. data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb +0 -54
  1463. data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb.expected +0 -2
  1464. data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb +0 -46
  1465. data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb.expected +0 -2
  1466. data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb +0 -50
  1467. data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb.expected +0 -3
  1468. data/vendor/spinel/test/implicit_self_param_poly.rb +0 -17
  1469. data/vendor/spinel/test/implicit_self_param_poly.rb.expected +0 -1
  1470. data/vendor/spinel/test/inherit.rb +0 -52
  1471. data/vendor/spinel/test/inherit.rb.expected +0 -7
  1472. data/vendor/spinel/test/inherited_method_param_widen.rb +0 -49
  1473. data/vendor/spinel/test/init_locals.rb +0 -43
  1474. data/vendor/spinel/test/init_locals.rb.expected +0 -3
  1475. data/vendor/spinel/test/initialize_param_poly_call_sites.rb +0 -20
  1476. data/vendor/spinel/test/initialize_param_poly_call_sites.rb.expected +0 -2
  1477. data/vendor/spinel/test/initialize_param_through_call.rb +0 -15
  1478. data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb +0 -40
  1479. data/vendor/spinel/test/int_array_replace_expr.rb +0 -23
  1480. data/vendor/spinel/test/int_array_replace_expr.rb.expected +0 -7
  1481. data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb +0 -25
  1482. data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb.expected +0 -1
  1483. data/vendor/spinel/test/integer_div.rb +0 -21
  1484. data/vendor/spinel/test/integer_div.rb.expected +0 -10
  1485. data/vendor/spinel/test/introspect.rb +0 -35
  1486. data/vendor/spinel/test/introspect.rb.expected +0 -11
  1487. data/vendor/spinel/test/issue176_empty_hash_default.rb +0 -34
  1488. data/vendor/spinel/test/issue176_empty_hash_default.rb.expected +0 -3
  1489. data/vendor/spinel/test/issue204_user_find_fetch.rb +0 -25
  1490. data/vendor/spinel/test/issue204_user_find_fetch.rb.expected +0 -5
  1491. data/vendor/spinel/test/issue207_factory_pattern.rb +0 -35
  1492. data/vendor/spinel/test/issue207_factory_pattern.rb.expected +0 -1
  1493. data/vendor/spinel/test/issue207_full_repro.rb +0 -52
  1494. data/vendor/spinel/test/issue207_full_repro.rb.expected +0 -1
  1495. data/vendor/spinel/test/issue208_inherited_class_method.rb +0 -24
  1496. data/vendor/spinel/test/issue208_inherited_class_method.rb.expected +0 -4
  1497. data/vendor/spinel/test/issue219_aref_chain.rb +0 -36
  1498. data/vendor/spinel/test/issue219_aref_chain.rb.expected +0 -5
  1499. data/vendor/spinel/test/issue235_chain_tail_widening.rb +0 -48
  1500. data/vendor/spinel/test/issue235_chain_tail_widening.rb.expected +0 -5
  1501. data/vendor/spinel/test/ivar_and_write_basic.rb +0 -34
  1502. data/vendor/spinel/test/ivar_and_write_basic.rb.expected +0 -5
  1503. data/vendor/spinel/test/ivar_c_keyword.rb +0 -14
  1504. data/vendor/spinel/test/ivar_c_keyword.rb.expected +0 -1
  1505. data/vendor/spinel/test/ivar_float_array.rb +0 -59
  1506. data/vendor/spinel/test/ivar_float_array.rb.expected +0 -11
  1507. data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb +0 -22
  1508. data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb.expected +0 -6
  1509. data/vendor/spinel/test/ivar_or_write_basic.rb +0 -57
  1510. data/vendor/spinel/test/ivar_or_write_basic.rb.expected +0 -9
  1511. data/vendor/spinel/test/ivar_writer_heterogeneity.rb +0 -34
  1512. data/vendor/spinel/test/ivar_writer_heterogeneity.rb.expected +0 -2
  1513. data/vendor/spinel/test/known_constants.rb +0 -25
  1514. data/vendor/spinel/test/known_constants.rb.expected +0 -4
  1515. data/vendor/spinel/test/kw_nil_default_string_call.rb +0 -6
  1516. data/vendor/spinel/test/kw_nil_default_string_call.rb.expected +0 -2
  1517. data/vendor/spinel/test/map_array_block_result.rb +0 -29
  1518. data/vendor/spinel/test/map_array_block_result.rb.expected +0 -2
  1519. data/vendor/spinel/test/map_block_returns_nested_array.rb +0 -53
  1520. data/vendor/spinel/test/map_empty_block.rb +0 -26
  1521. data/vendor/spinel/test/map_empty_block.rb.expected +0 -6
  1522. data/vendor/spinel/test/map_range_recv_array_block.rb +0 -31
  1523. data/vendor/spinel/test/method_param_unify_to_poly.rb +0 -40
  1524. data/vendor/spinel/test/method_param_unify_to_poly.rb.expected +0 -2
  1525. data/vendor/spinel/test/multi_arg_block_call.rb +0 -56
  1526. data/vendor/spinel/test/multi_arg_block_call.rb.expected +0 -5
  1527. data/vendor/spinel/test/multi_assign_ivar.rb +0 -33
  1528. data/vendor/spinel/test/multi_assign_ivar.rb.expected +0 -1
  1529. data/vendor/spinel/test/multi_write_const.rb +0 -36
  1530. data/vendor/spinel/test/multi_write_const.rb.expected +0 -9
  1531. data/vendor/spinel/test/multi_write_from_poly_recv.rb +0 -34
  1532. data/vendor/spinel/test/multi_write_ivar.rb +0 -34
  1533. data/vendor/spinel/test/multi_write_ivar.rb.expected +0 -3
  1534. data/vendor/spinel/test/multi_write_ivar_widening.rb +0 -10
  1535. data/vendor/spinel/test/multi_write_ivar_widening.rb.expected +0 -2
  1536. data/vendor/spinel/test/multi_write_map_block.rb +0 -31
  1537. data/vendor/spinel/test/multi_write_map_block.rb.expected +0 -7
  1538. data/vendor/spinel/test/multi_write_setter.rb +0 -28
  1539. data/vendor/spinel/test/multi_write_setter.rb.expected +0 -3
  1540. data/vendor/spinel/test/multi_write_typed_array_dispatch.rb +0 -44
  1541. data/vendor/spinel/test/multi_write_typed_array_dispatch.rb.expected +0 -3
  1542. data/vendor/spinel/test/nested_class_in_class.rb +0 -38
  1543. data/vendor/spinel/test/nested_class_in_class.rb.expected +0 -3
  1544. data/vendor/spinel/test/no_attr_write_shortcut_complex.rb +0 -33
  1545. data/vendor/spinel/test/no_attr_write_shortcut_complex.rb.expected +0 -3
  1546. data/vendor/spinel/test/no_attr_write_shortcut_multi.rb +0 -38
  1547. data/vendor/spinel/test/no_attr_write_shortcut_multi.rb.expected +0 -4
  1548. data/vendor/spinel/test/no_keywords_param.rb +0 -15
  1549. data/vendor/spinel/test/no_keywords_param.rb.expected +0 -2
  1550. data/vendor/spinel/test/obj_array.rb +0 -26
  1551. data/vendor/spinel/test/obj_array.rb.expected +0 -6
  1552. data/vendor/spinel/test/obj_class_returns_string.rb +0 -24
  1553. data/vendor/spinel/test/obj_class_returns_string.rb.expected +0 -2
  1554. data/vendor/spinel/test/optional_string_param_method.rb +0 -11
  1555. data/vendor/spinel/test/optional_string_param_method.rb.expected +0 -3
  1556. data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb +0 -37
  1557. data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb.expected +0 -9
  1558. data/vendor/spinel/test/poly_array_slot_literal.rb +0 -41
  1559. data/vendor/spinel/test/poly_array_slot_sized_default.rb +0 -33
  1560. data/vendor/spinel/test/poly_box_int_array.rb +0 -13
  1561. data/vendor/spinel/test/poly_box_int_array.rb.expected +0 -2
  1562. data/vendor/spinel/test/poly_dispatch_args_ret.rb +0 -45
  1563. data/vendor/spinel/test/poly_dispatch_args_ret.rb.expected +0 -4
  1564. data/vendor/spinel/test/poly_dispatch_arity_padding.rb +0 -36
  1565. data/vendor/spinel/test/poly_dispatch_arity_truncate.rb +0 -45
  1566. data/vendor/spinel/test/poly_hash_literal_from_ivar.rb +0 -47
  1567. data/vendor/spinel/test/poly_hash_literal_from_ivar.rb.expected +0 -5
  1568. data/vendor/spinel/test/poly_int_arith_auto_unify.rb +0 -26
  1569. data/vendor/spinel/test/poly_int_arith_auto_unify.rb.expected +0 -4
  1570. data/vendor/spinel/test/poly_int_bit_index.rb +0 -50
  1571. data/vendor/spinel/test/poly_int_bit_index.rb.expected +0 -14
  1572. data/vendor/spinel/test/poly_or_returns_value.rb +0 -13
  1573. data/vendor/spinel/test/poly_or_returns_value.rb.expected +0 -4
  1574. data/vendor/spinel/test/poly_recv_bracket_assign.rb +0 -31
  1575. data/vendor/spinel/test/poly_recv_bracket_assign.rb.expected +0 -1
  1576. data/vendor/spinel/test/poly_recv_each.rb +0 -35
  1577. data/vendor/spinel/test/poly_recv_each.rb.expected +0 -7
  1578. data/vendor/spinel/test/poly_shl_array_push_dispatch.rb +0 -35
  1579. data/vendor/spinel/test/poly_shl_array_push_dispatch.rb.expected +0 -5
  1580. data/vendor/spinel/test/proc_hash_value.rb +0 -27
  1581. data/vendor/spinel/test/regexp.rb +0 -34
  1582. data/vendor/spinel/test/regexp.rb.expected +0 -12
  1583. data/vendor/spinel/test/reopen_class.rb +0 -33
  1584. data/vendor/spinel/test/reopen_class.rb.expected +0 -5
  1585. data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb +0 -27
  1586. data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb.expected +0 -3
  1587. data/vendor/spinel/test/sample_user_method.rb +0 -20
  1588. data/vendor/spinel/test/scan_ivars_inherited_slot.rb +0 -32
  1589. data/vendor/spinel/test/scan_new_calls_class_scope.rb +0 -35
  1590. data/vendor/spinel/test/send.rb +0 -15
  1591. data/vendor/spinel/test/send.rb.expected +0 -2
  1592. data/vendor/spinel/test/stdlib.rb +0 -28
  1593. data/vendor/spinel/test/stdlib.rb.expected +0 -5
  1594. data/vendor/spinel/test/strip_nullable_int_cast.rb +0 -24
  1595. data/vendor/spinel/test/super_arg_cross_class_cast.rb +0 -39
  1596. data/vendor/spinel/test/super_arg_cross_class_cast.rb.expected +0 -2
  1597. data/vendor/spinel/test/super_forwarding.rb +0 -25
  1598. data/vendor/spinel/test/super_forwarding.rb.expected +0 -3
  1599. data/vendor/spinel/test/sym_case.rb +0 -15
  1600. data/vendor/spinel/test/sym_case.rb.expected +0 -4
  1601. data/vendor/spinel/test/symbol_ivar_reassign.rb +0 -25
  1602. data/vendor/spinel/test/symbol_ivar_reassign.rb.expected +0 -2
  1603. data/vendor/spinel/test/toplevel_ivar_array.rb +0 -19
  1604. data/vendor/spinel/test/toplevel_ivar_array.rb.expected +0 -4
  1605. data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb +0 -20
  1606. data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb.expected +0 -1
  1607. data/vendor/spinel/test/undef.rb +0 -33
  1608. data/vendor/spinel/test/undef.rb.expected +0 -2
  1609. data/vendor/spinel/test/user_method_named_like_mutator.rb +0 -30
  1610. data/vendor/spinel/test/user_method_named_like_mutator.rb.expected +0 -2
  1611. data/vendor/spinel/test/value_type_ctor_gc_save.rb +0 -46
  1612. data/vendor/spinel/test/value_type_ctor_gc_save.rb.expected +0 -3
  1613. data/vendor/spinel/test/widen_int_obj_to_poly.rb +0 -29
  1614. /data/vendor/spinel/test/{multi_write_from_poly_recv.rb.expected → bare_arg_in_module_body.rb.expected} +0 -0
  1615. /data/vendor/spinel/test/{default_argv_narrows_from_string_call_site.rb.expected → cvar_method_first_assign.rb.expected} +0 -0
  1616. /data/vendor/spinel/test/{array_each_with_object.rb.expected → empty_array_push_container_elem.rb.expected} +0 -0
  1617. /data/vendor/spinel/test/{class_var_write.rb.expected → ffi_array_specs_decl.rb.expected} +0 -0
  1618. /data/vendor/spinel/test/{array_method_name_clash.rb.expected → ffi_int_arg_poly_value.rb.expected} +0 -0
  1619. /data/vendor/spinel/test/{initialize_void_wrapper_gc_save.rb.expected → ffi_ptr_array.rb.expected} +0 -0
  1620. /data/vendor/spinel/test/{inherited_method_param_widen.rb.expected → ffi_ptr_int_literal.rb.expected} +0 -0
  1621. /data/vendor/spinel/test/{forward_call_class_method_nested.rb.expected → ffi_str_arg_poly_value.rb.expected} +0 -0
  1622. /data/vendor/spinel/test/{proc_hash_value.rb.expected → file_write_at_tail_position.rb.expected} +0 -0
  1623. /data/vendor/spinel/test/{array_shuffle_ptr.rb.expected → hash_key_via_intermediate_local.rb.expected} +0 -0
  1624. /data/vendor/spinel/test/{forward_call_class_method_inherited_init_int_array.rb.expected → hash_param_widen_from_callee_slot.rb.expected} +0 -0
  1625. /data/vendor/spinel/test/{strip_nullable_int_cast.rb.expected → hash_temp_gc_root.rb.expected} +0 -0
  1626. /data/vendor/spinel/test/{scan_new_calls_class_scope.rb.expected → poly_recv_hash_dup.rb.expected} +0 -0
  1627. /data/vendor/spinel/test/{class_constant_sym_array.rb.expected → respond_to_def_self_method.rb.expected} +0 -0
  1628. /data/vendor/spinel/test/{initialize_param_through_call.rb.expected → warn_unresolved_call_context.rb.expected} +0 -0
@@ -0,0 +1,1506 @@
1
+ # Shared helpers used by both spinel_analyze.rb and
2
+ # spinel_codegen.rb. Extracted to avoid byte-for-byte
3
+ # duplication between the two compiler passes. Both passes
4
+ # already share node-table accessors (@nd_type / @nd_name /
5
+ # @nd_arguments / etc.) and class-table accessors
6
+ # (cls_find_method / cls_method_return / etc.) by virtue of
7
+ # both defining a `class Compiler`; the methods here only
8
+ # depend on that shared surface.
9
+ #
10
+ # To add a helper here it must:
11
+ # - depend only on instance vars / methods that exist on
12
+ # BOTH the analyze-side and codegen-side Compiler
13
+ # - not perform pass-specific side effects (emit, push narrow
14
+ # stack only via methods both sides define, etc.)
15
+ # - have identical semantics in both passes (drift between
16
+ # the two would re-introduce the original bug)
17
+
18
+ # CRuby bootstrap shim for compiler_state_* declarations. Spinel's
19
+ # analyzer/codegen consume these calls at compile time and emit concrete
20
+ # methods; this shim only keeps the Ruby-hosted bootstrap compiler
21
+ # executable while the compiled binaries are being rebuilt.
22
+ if RUBY_ENGINE == "ruby"
23
+ class Module
24
+ def compiler_state_entries; @compiler_state_entries ||= []; end
25
+
26
+ def compiler_state_register(kind, names)
27
+ names.each do |raw_name|
28
+ compiler_state_entries << [kind.to_s, raw_name.to_s]
29
+ end
30
+ compiler_state_define_runtime_methods
31
+ end
32
+
33
+ def compiler_state_int(*names); compiler_state_register("int", names); end
34
+ def compiler_state_str(*names); compiler_state_register("str", names); end
35
+ def compiler_state_sa(*names); compiler_state_register("sa", names); end
36
+ def compiler_state_ia(*names); compiler_state_register("ia", names); end
37
+
38
+ def compiler_state_define_runtime_methods
39
+ return if @compiler_state_runtime_methods_defined
40
+
41
+ @compiler_state_runtime_methods_defined = true
42
+
43
+ define_method(:init_compiler_state) do
44
+ self.class.compiler_state_entries.each do |kind, name|
45
+ val = 0
46
+ if kind == "str"
47
+ val = ""
48
+ elsif kind == "sa"
49
+ val = []
50
+ elsif kind == "ia"
51
+ val = []
52
+ end
53
+ instance_variable_set("@" + name, val)
54
+ end
55
+ 0
56
+ end
57
+
58
+ define_method(:dump_compiler_state_ir) do |buf|
59
+ self.class.compiler_state_entries.each do |kind, name|
60
+ ir_name = "@" + name
61
+ val = instance_variable_get(ir_name)
62
+ if kind == "int"
63
+ buf = ir_emit_int(buf, ir_name, val)
64
+ elsif kind == "str"
65
+ buf = ir_emit_str(buf, ir_name, val)
66
+ elsif kind == "sa"
67
+ buf = ir_emit_sa(buf, ir_name, val)
68
+ elsif kind == "ia"
69
+ buf = ir_emit_ia(buf, ir_name, val)
70
+ end
71
+ end
72
+ buf
73
+ end
74
+
75
+ define_method(:compiler_state_set_runtime) do |kind, name, val|
76
+ self.class.compiler_state_entries.each do |entry_kind, field|
77
+ if entry_kind == kind && name == "@" + field
78
+ instance_variable_set(name, val)
79
+ end
80
+ end
81
+ 0
82
+ end
83
+
84
+ define_method(:compiler_state_set_int) { |name, val| compiler_state_set_runtime("int", name, val) }
85
+ define_method(:compiler_state_set_str) { |name, val| compiler_state_set_runtime("str", name, val) }
86
+ define_method(:compiler_state_set_sa) { |name, val| compiler_state_set_runtime("sa", name, val) }
87
+ define_method(:compiler_state_set_ia) { |name, val| compiler_state_set_runtime("ia", name, val) }
88
+ end
89
+ end
90
+ end
91
+
92
+ class Compiler
93
+
94
+ # ---- Compile-time class-body declaration helpers ----
95
+
96
+ compiler_state_int :nd_count, :root_id, :analysis_frozen, :ieval_counter, :iexec_counter, :needs_gc, :needs_system
97
+ compiler_state_int :needs_int_array, :needs_float_array, :needs_str_array, :needs_str_int_hash, :needs_str_str_hash, :needs_int_str_hash
98
+ compiler_state_int :needs_sym_int_hash, :needs_sym_str_hash, :needs_sym_intern, :needs_setjmp, :needs_mutable_str, :needs_rb_value
99
+ compiler_state_int :needs_regexp, :needs_rand, :needs_stringio, :needs_lambda, :needs_fiber, :needs_bigint
100
+ compiler_state_int :needs_poly_array, :needs_poly_poly_hash, :needs_str_poly_hash, :needs_sym_poly_hash, :needs_ptr_array, :needs_file_io
101
+
102
+ compiler_state_str :cls_cmeth_live, :cls_meth_live
103
+
104
+ compiler_state_sa :meth_names, :meth_param_names, :meth_param_types, :meth_param_empty, :meth_return_types, :meth_has_defaults
105
+ compiler_state_sa :cls_names, :cls_parents, :cls_includes, :cls_ivar_names, :cls_ivar_types, :cls_ivar_init_definite
106
+ compiler_state_sa :cls_ivar_observed_types, :cls_meth_names, :cls_meth_params, :cls_meth_ptypes, :cls_meth_returns, :cls_meth_bodies
107
+ compiler_state_sa :cls_rest_keys, :dead_mod_cls_meths, :cls_meth_defaults, :cls_meth_ptypes_empty, :cls_meth_prep_chain, :cls_attr_readers
108
+ compiler_state_sa :cls_attr_writers, :cls_cmeth_names, :cls_cmeth_params, :cls_cmeth_ptypes, :cls_cmeth_returns, :cls_cmeth_bodies
109
+ compiler_state_sa :cls_cmeth_defaults, :cls_cmeth_scope_names, :cls_cmeth_scope_types, :cls_meth_has_yield, :cls_method_adapters, :const_names
110
+ compiler_state_sa :const_types, :const_scope_names, :const_init_class, :cvar_names, :cvar_types, :cvar_init_values
111
+ compiler_state_sa :gvar_names, :gvar_types, :module_names, :module_includes, :module_acc_keys, :module_acc_consts
112
+ compiler_state_sa :ffi_modules, :ffi_module_libs, :ffi_module_cflags, :ffi_func_modules, :ffi_func_names, :ffi_func_arg_types
113
+ compiler_state_sa :ffi_func_ret_types, :ffi_func_arg_specs, :ffi_func_ret_specs, :ffi_buf_modules, :ffi_buf_names, :ffi_reader_modules
114
+ compiler_state_sa :ffi_reader_names, :ffi_reader_kinds, :regexp_patterns, :regexp_flags, :dyn_regex_flags, :local_regex_names
115
+ compiler_state_sa :open_class_names, :method_ref_vars, :method_ref_names, :galias_new, :galias_old, :undef_method
116
+ compiler_state_sa :sym_names, :tuple_types, :poly_funcs, :poly_param_types, :ieval_return_types, :ieval_self_param_names
117
+ compiler_state_sa :ieval_extra_param_names, :compile_time_subst_keys, :compile_time_subst_vals, :cls_with_internal_ieval_lift, :toplevel_ivar_names, :toplevel_ivar_types
118
+ compiler_state_sa :lambda_var_ret_names, :lambda_var_ret_types, :multi_const_inits, :meth_blk_param_types, :cls_cmeth_blk_param_types
119
+ compiler_state_sa :iexec_block_pnames, :iexec_block_ptypes
120
+ compiler_state_sa :attr_alias_keys, :attr_alias_ivars
121
+ compiler_state_sa :cls_meth_blk_param_types
122
+ compiler_state_sa :lowered_yield_methods
123
+
124
+ compiler_state_ia :meth_body_ids, :meth_rest_index, :meth_kwrest_index, :meth_has_yield, :cls_rest_idxs, :cls_is_value_type
125
+ compiler_state_ia :cls_is_sra, :const_expr_ids, :const_mutated, :gvar_written, :module_body_ids, :ffi_buf_sizes, :ffi_reader_offsets
126
+ compiler_state_ia :dyn_regex_node_ids, :local_regex_idx, :local_regex_call_nids, :undef_class_idx, :ieval_class_idxs, :ieval_body_ids
127
+ compiler_state_ia :pre_execution_blocks, :post_execution_blocks
128
+ compiler_state_ia :iexec_class_idxs, :iexec_body_ids
129
+
130
+ def compiler_state_init_body_id; -31; end
131
+ def compiler_state_dump_body_id; -32; end
132
+ def compiler_state_set_int_body_id; -33; end
133
+ def compiler_state_set_str_body_id; -34; end
134
+ def compiler_state_set_sa_body_id; -35; end
135
+ def compiler_state_set_ia_body_id; -36; end
136
+
137
+ def compiler_state_synthetic_body_id?(bid)
138
+ if bid <= compiler_state_init_body_id && bid >= compiler_state_set_ia_body_id
139
+ return 1
140
+ end
141
+ 0
142
+ end
143
+
144
+ def compiler_state_macro_kind(mn)
145
+ return "int" if mn == "compiler_state_int"
146
+ return "str" if mn == "compiler_state_str"
147
+ return "sa" if mn == "compiler_state_sa"
148
+ return "ia" if mn == "compiler_state_ia"
149
+ ""
150
+ end
151
+
152
+ def compiler_state_field_type(kind)
153
+ return "string" if kind == "str"
154
+ return "str_array" if kind == "sa"
155
+ return "int_array" if kind == "ia"
156
+ "int"
157
+ end
158
+
159
+ def compile_time_subst_key(ci, mname, bid, varname)
160
+ ci.to_s + ":" + mname + ":" + bid.to_s + ":" + varname
161
+ end
162
+
163
+ def compile_time_subst_lookup(ci, mname, bid, varname)
164
+ if ci < 0 || mname == "" || varname == ""
165
+ return ""
166
+ end
167
+ key = compile_time_subst_key(ci, mname, bid, varname)
168
+ i = 0
169
+ while i < @compile_time_subst_keys.length
170
+ if @compile_time_subst_keys[i] == key
171
+ if i < @compile_time_subst_vals.length
172
+ return @compile_time_subst_vals[i]
173
+ end
174
+ return ""
175
+ end
176
+ i = i + 1
177
+ end
178
+ ""
179
+ end
180
+
181
+ def compile_time_subst_for_current(varname)
182
+ if @current_class_idx < 0 || @current_method_name == ""
183
+ return ""
184
+ end
185
+ midx = cls_find_method_direct(@current_class_idx, @current_method_name)
186
+ if midx < 0
187
+ return ""
188
+ end
189
+ bodies = @cls_meth_bodies[@current_class_idx].split(";", -1)
190
+ if midx >= bodies.length
191
+ return ""
192
+ end
193
+ compile_time_subst_lookup(@current_class_idx, @current_method_name, bodies[midx].to_i, varname)
194
+ end
195
+
196
+ def compile_time_literal_type(encoded)
197
+ if encoded.start_with?("sym:")
198
+ return "symbol"
199
+ end
200
+ if encoded.start_with?("str:")
201
+ return "string"
202
+ end
203
+ if encoded.start_with?("int:")
204
+ return "int"
205
+ end
206
+ ""
207
+ end
208
+
209
+ def compile_time_literal_payload(encoded)
210
+ parts = encoded.split(":", -1)
211
+ if parts.length < 2
212
+ return ""
213
+ end
214
+ payload = ""
215
+ i = 1
216
+ while i < parts.length
217
+ if i > 1
218
+ payload = payload + ":"
219
+ end
220
+ payload = payload + parts[i]
221
+ i = i + 1
222
+ end
223
+ payload
224
+ end
225
+
226
+ # ---- Nil-guard narrow helpers (#550) ----
227
+
228
+ # `<lv>.nil?` predicate. Returns the LV name; otherwise "".
229
+ def parse_nil_predicate(pred_id)
230
+ if pred_id < 0
231
+ return ""
232
+ end
233
+ if @nd_type[pred_id] != "CallNode"
234
+ return ""
235
+ end
236
+ if @nd_name[pred_id] != "nil?"
237
+ return ""
238
+ end
239
+ recv = @nd_receiver[pred_id]
240
+ if recv < 0 || @nd_type[recv] != "LocalVariableReadNode"
241
+ return ""
242
+ end
243
+ @nd_name[recv]
244
+ end
245
+
246
+ # Body ends with a definite scope exit. Used by the nil-guard
247
+ # narrow (issue #550) to identify guards whose continuation
248
+ # only fires when the predicate held. Recognizes:
249
+ # - `return X` (ReturnNode)
250
+ # - `raise ...` / `throw ...` (CallNode)
251
+ # - `break` / `next` (BreakNode / NextNode) -- both unwind
252
+ # the iteration / loop, so the narrow applies to the rest
253
+ # of the enclosing block.
254
+ def body_definitely_exits?(body_id)
255
+ if body_id < 0
256
+ return 0
257
+ end
258
+ stmts_r = get_stmts(body_id)
259
+ if stmts_r.length == 0
260
+ return 0
261
+ end
262
+ last = stmts_r[stmts_r.length - 1]
263
+ if @nd_type[last] == "ReturnNode"
264
+ return 1
265
+ end
266
+ if @nd_type[last] == "BreakNode" || @nd_type[last] == "NextNode"
267
+ return 1
268
+ end
269
+ if @nd_type[last] == "CallNode" && (@nd_name[last] == "raise" || @nd_name[last] == "throw")
270
+ return 1
271
+ end
272
+ 0
273
+ end
274
+
275
+ # Given the rhs of the most recent write to a local variable
276
+ # whose nil? was just checked, return the type the variable
277
+ # narrows to after the nil-exit. Currently recognizes
278
+ # `<string>.index(needle)` / rindex / find_index returning
279
+ # int-or-nil; the non-nil arm is mrb_int. Returns "" when the
280
+ # writer's shape isn't a known int-or-nil source so the caller
281
+ # leaves the type alone. Issue #550.
282
+ def infer_nil_guard_narrow_type(expr_id)
283
+ if expr_id < 0
284
+ return ""
285
+ end
286
+ if @nd_type[expr_id] != "CallNode"
287
+ return ""
288
+ end
289
+ mname_eg = @nd_name[expr_id]
290
+ recv_eg = @nd_receiver[expr_id]
291
+ if recv_eg < 0
292
+ return ""
293
+ end
294
+ if mname_eg == "index" || mname_eg == "rindex" || mname_eg == "find_index"
295
+ rt_eg = infer_type(recv_eg)
296
+ if rt_eg == "string" || rt_eg == "mutable_str"
297
+ return "int"
298
+ end
299
+ # Array#index family on int_array now returns int? (sentinel-
300
+ # encoded). After `return if h.nil?` the live arm sees the value
301
+ # as a plain int, same as the String#index narrow above.
302
+ if rt_eg == "int_array"
303
+ return "int"
304
+ end
305
+ return ""
306
+ end
307
+ # Maybe-missing typed-int-hash read `x = h[k]; return if x.nil?`:
308
+ # the live arm proved the key present, so the read narrows from
309
+ # int? back to a plain mrb_int. Mirrors the int_array arm above.
310
+ # No-op until typed-int-hash `[]` returns int? (#801 Phase 4).
311
+ if mname_eg == "[]"
312
+ rt_he = base_type(infer_type(recv_eg))
313
+ if rt_he == "str_int_hash" || rt_he == "sym_int_hash" || rt_he == "int_int_hash"
314
+ return "int"
315
+ end
316
+ return ""
317
+ end
318
+ ""
319
+ end
320
+
321
+ # Recognize `return X if h.nil?` shape; return the LV name or
322
+ # "". Caller threads the stmt list separately into
323
+ # scan_back_writer_narrow_for to derive the narrow type. (Two
324
+ # separate calls instead of one [var, type] return because
325
+ # spinel-self's inference widens an array-return into poly,
326
+ # cascading into push_type_narrow's param signature.)
327
+ # Issue #550.
328
+ def parse_nil_guard_var(nid)
329
+ if nid < 0
330
+ return ""
331
+ end
332
+ if @nd_type[nid] != "IfNode"
333
+ return ""
334
+ end
335
+ body_i = @nd_body[nid]
336
+ if body_definitely_exits?(body_i) == 0
337
+ return ""
338
+ end
339
+ sub_i = @nd_subsequent[nid]
340
+ else_i = @nd_else_clause[nid]
341
+ if sub_i >= 0 || else_i >= 0
342
+ return ""
343
+ end
344
+ parse_nil_predicate(@nd_predicate[nid])
345
+ end
346
+
347
+ def scan_back_writer_narrow_for(stmts_list, before_idx, varname)
348
+ j = before_idx - 1
349
+ while j >= 0
350
+ stmt = stmts_list[j]
351
+ if @nd_type[stmt] == "LocalVariableWriteNode" && @nd_name[stmt] == varname
352
+ return infer_nil_guard_narrow_type(@nd_expression[stmt])
353
+ end
354
+ j = j - 1
355
+ end
356
+ ""
357
+ end
358
+
359
+ # ---- Poly-recv dispatch helpers (#549) ----
360
+
361
+ # For a `<poly>.<mname>(args)` site, return the static C type
362
+ # the dispatch result temp should have. Returns "poly" when
363
+ # the surviving cls_id arms can't agree on a single scalar.
364
+ # nid + arg_types let the helper apply the same arm-suppression
365
+ # logic the emit loop uses (param-incompat + observed-class
366
+ # narrow), so unreachable arms don't widen the result.
367
+ def poly_dispatch_return_type(mname, nid = -1, arg_types = "".split(","))
368
+ # arg_types defaults to an empty StrArray rather than nil so the
369
+ # nil-default + typed-callsite widening that #634 enables doesn't
370
+ # collapse this param's slot to poly. Both call sites always pass
371
+ # a concrete StrArray, so the empty default is observationally
372
+ # equivalent to the prior nil-then-replace.
373
+ if mname == "[]"
374
+ @needs_rb_value = 1
375
+ return "poly"
376
+ end
377
+ # Hash-shape preserving methods on a poly recv carrying hash
378
+ # storage. The result temp must be sp_RbVal so the per-cls_id
379
+ # arm's `tmp = sp_box_obj(...)` lands. Without this, the temp
380
+ # is mrb_int and the assignment silently no-ops, leaving every
381
+ # downstream consumer reading the int 0 default.
382
+ if mname == "dup" || mname == "each" || mname == "to_h" || mname == "merge"
383
+ @needs_rb_value = 1
384
+ return "poly"
385
+ end
386
+ # `fetch` on a poly recv: runtime cls_id picks between user-class
387
+ # `fetch` arms and built-in Hash-variant arms (StrIntHash /
388
+ # StrStrHash / StrPolyHash). Each arm's value type differs (int /
389
+ # string / poly) so the result temp must be sp_RbVal -- without
390
+ # widening, the temp's static C type comes from the first user
391
+ # class's `fetch` return and other arms' rhs fails to compile
392
+ # against it. Sibling to `[]` widening above; same rationale.
393
+ if mname == "fetch"
394
+ @needs_rb_value = 1
395
+ return "poly"
396
+ end
397
+ # Source-level narrow set from ivar observations: when the
398
+ # receiver reads from an ivar whose observed type set is all
399
+ # obj_X (no poly / no primitives), the dispatch can only ever
400
+ # land on those classes. Combined with the param-incompat
401
+ # check below, this prunes arms whose return type would
402
+ # otherwise widen the dispatch result to sp_RbVal even though
403
+ # they can never fire at runtime. Issues #549, #531.
404
+ narrow_set = poly_dispatch_narrow_class_set(nid)
405
+ # Built-in string methods that compile_poly_method_call also
406
+ # lowers via a SP_TAG_STR arm -- their result temp needs to be
407
+ # at least string-typed so the per-tag dispatch assignment
408
+ # doesn't try to store const char * into a mrb_int slot. If a
409
+ # user class also defines the method with a different return
410
+ # type, the per-class loop below escalates to "poly".
411
+ if mname == "gsub" || mname == "sub"
412
+ ci_s = 0
413
+ diverges = 0
414
+ while ci_s < @cls_names.length
415
+ if narrow_set != "" && poly_dispatch_class_in_set(narrow_set, ci_s) == 0
416
+ ci_s = ci_s + 1
417
+ else
418
+ if cls_find_method(ci_s, mname) >= 0 && poly_dispatch_arm_param_compat(ci_s, mname, arg_types) == 1
419
+ urt = cls_method_return(ci_s, mname)
420
+ if urt != "" && urt != "string"
421
+ diverges = 1
422
+ ci_s = @cls_names.length
423
+ end
424
+ end
425
+ ci_s = ci_s + 1
426
+ end
427
+ end
428
+ if diverges == 1
429
+ @needs_rb_value = 1
430
+ return "poly"
431
+ end
432
+ return "string"
433
+ end
434
+ # Setters: mname ends with "=" and at least one class has an
435
+ # attr_writer for the bare name. Return type is the ivar type
436
+ # (Ruby returns the rhs from `x = v`); without this, the result
437
+ # tmp's C type defaults to `mrb_int` and `tmp = rhs` mismatches
438
+ # for non-int slots.
439
+ setter_bname = ""
440
+ if mname.length > 1 && mname[mname.length - 1] == "="
441
+ setter_bname = mname[0, mname.length - 1]
442
+ end
443
+ common = ""
444
+ ci = 0
445
+ while ci < @cls_names.length
446
+ if narrow_set != "" && poly_dispatch_class_in_set(narrow_set, ci) == 0
447
+ ci = ci + 1
448
+ else
449
+ rt = ""
450
+ if cls_find_method(ci, mname) >= 0
451
+ # Skip arms whose param types can't accept the dispatch
452
+ # site's arg types -- mirrors the arm_incompat check in
453
+ # the emit loop so the result-type union doesn't see
454
+ # return types from arms the runtime can't reach.
455
+ if poly_dispatch_arm_param_compat(ci, mname, arg_types) == 0
456
+ rt = ""
457
+ else
458
+ rt = cls_method_return(ci, mname)
459
+ end
460
+ elsif cls_has_attr_reader(ci, mname) == 1
461
+ # An attr_reader returns the ivar type. .
462
+ rt = cls_ivar_type(ci, "@" + mname)
463
+ elsif setter_bname != "" && cls_has_attr_writer(ci, setter_bname) == 1
464
+ # An attr_writer setter returns the ivar's type.
465
+ rt = cls_ivar_type(ci, "@" + setter_bname)
466
+ end
467
+ if rt != ""
468
+ if common == ""
469
+ common = rt
470
+ elsif common != rt
471
+ return "poly"
472
+ end
473
+ end
474
+ ci = ci + 1
475
+ end
476
+ end
477
+ common == "" ? "int" : common
478
+ end
479
+
480
+ # Returns a comma-separated list of class indices the dispatch
481
+ # site can possibly land on, derived from the receiver ivar's
482
+ # observed type set. Returns "" when no narrowing is safe
483
+ # (non-ivar receiver, partial observation, or any non-obj
484
+ # observation like "poly" / "int" / "string"). Issue #549.
485
+ def poly_dispatch_narrow_class_set(nid)
486
+ if nid < 0
487
+ return ""
488
+ end
489
+ if @current_class_idx < 0
490
+ return ""
491
+ end
492
+ recv_id = @nd_receiver[nid]
493
+ if recv_id < 0
494
+ return ""
495
+ end
496
+ if @nd_type[recv_id] != "InstanceVariableReadNode"
497
+ return ""
498
+ end
499
+ iname = @nd_name[recv_id]
500
+ obs = cls_ivar_observed_types_for(@current_class_idx, iname)
501
+ if obs == ""
502
+ return ""
503
+ end
504
+ out = ""
505
+ parts = obs.split(",")
506
+ k = 0
507
+ while k < parts.length
508
+ t = parts[k]
509
+ if t == ""
510
+ # blank slot -- uninformative, skip
511
+ elsif t == "poly"
512
+ # "poly" alone means the writer-scan saw a widened union value
513
+ # (typically a method param that received obj_X across multiple
514
+ # callsites and collapsed to poly). The companion ctor-arg
515
+ # propagation pass adds the concrete obj_X entries alongside,
516
+ # so when we ALSO see those, the obj_X set is sharper and we
517
+ # should keep the narrow. Skip the bare "poly" here; if no
518
+ # obj_X entries follow, `out` stays empty and the caller falls
519
+ # back to the unrestricted dispatch.
520
+ elsif is_obj_type(t) == 1
521
+ cname = t[4, t.length - 4]
522
+ cidx = find_class_idx(cname)
523
+ if cidx >= 0
524
+ s_idx = cidx.to_s
525
+ if out == ""
526
+ out = s_idx
527
+ else
528
+ # dedup
529
+ already = 0
530
+ seen = out.split(",")
531
+ sk = 0
532
+ while sk < seen.length
533
+ if seen[sk] == s_idx
534
+ already = 1
535
+ end
536
+ sk = sk + 1
537
+ end
538
+ if already == 0
539
+ out = out + "," + s_idx
540
+ end
541
+ end
542
+ end
543
+ else
544
+ # Truly broad non-obj observation ("int", "string", "float"
545
+ # etc.) — the ivar can hold a value whose dispatch isn't a
546
+ # user-class method call at all. Bail to avoid unsound pruning.
547
+ return ""
548
+ end
549
+ k = k + 1
550
+ end
551
+ out
552
+ end
553
+
554
+ def poly_dispatch_class_in_set(set, ci)
555
+ if set == ""
556
+ return 1
557
+ end
558
+ target = ci.to_s
559
+ parts = set.split(",")
560
+ k = 0
561
+ while k < parts.length
562
+ if parts[k] == target
563
+ return 1
564
+ end
565
+ # Allow when ci is a descendant of an observed class. The ivar
566
+ # may have been written via a typed setter (`def set_x(f); @x = f; end`)
567
+ # whose param is the declared base type, but the actual runtime
568
+ # object is a subclass instance whose own cls_id won't appear in
569
+ # the observed set. Without this, the dispatch only emits the
570
+ # base-class arm and the subclass override is silently skipped --
571
+ # the #616 filter-elision shape (App.set_before(SubFilter.new) ->
572
+ # @before_filter.before(...) where the override never fires).
573
+ ancestor_ci = parts[k].to_i
574
+ if ancestor_ci >= 0 && cls_is_descendant(ci, ancestor_ci) == 1
575
+ return 1
576
+ end
577
+ k = k + 1
578
+ end
579
+ 0
580
+ end
581
+
582
+ # Mirrors the arm_incompat check inside compile_poly_method_call's
583
+ # emit loop. Returns 1 when the arm's param types are compatible
584
+ # with the dispatch site's arg types, 0 when at least one slot
585
+ # has a base-type mismatch outside the int/symbol/bool family.
586
+ def poly_dispatch_arm_param_compat(ci, mname, arg_types)
587
+ midx = cls_find_method_direct(ci, mname)
588
+ owner_idx = ci
589
+ if midx < 0
590
+ owner_name = find_method_owner(ci, mname)
591
+ if owner_name != ""
592
+ owner_idx = find_class_idx(owner_name)
593
+ if owner_idx >= 0
594
+ midx = cls_find_method_direct(owner_idx, mname)
595
+ end
596
+ end
597
+ end
598
+ if midx < 0
599
+ return 1
600
+ end
601
+ arm_ptypes = cls_meth_ptypes_get(owner_idx, midx)
602
+ pk = 0
603
+ while pk < arm_ptypes.length && pk < arg_types.length
604
+ at_b = base_type(arg_types[pk])
605
+ pt_b = base_type(arm_ptypes[pk])
606
+ if at_b != "" && pt_b != "" && at_b != "poly" && pt_b != "poly" && at_b != pt_b
607
+ if (at_b == "int" && pt_b == "symbol") || (at_b == "symbol" && pt_b == "int") ||
608
+ (at_b == "int" && pt_b == "bool") || (at_b == "bool" && pt_b == "int")
609
+ # compatible
610
+ elsif (at_b == "int" && pt_b == "bigint") || (at_b == "bigint" && pt_b == "int")
611
+ # promote mode: int and bigint coerce at the call boundary via
612
+ # sp_bigint_new_int / sp_bigint_to_int.
613
+ else
614
+ return 0
615
+ end
616
+ end
617
+ pk = pk + 1
618
+ end
619
+ 1
620
+ end
621
+
622
+ # ---- AST id-list cache ----
623
+
624
+ # Parse comma-sep node IDs into IntArray. Manually walks bytes to avoid
625
+ # allocating the intermediate StrArray + substrings that `String#split`
626
+ # would produce -- this is called ~100 K times during bootstrap.
627
+ # Results are cached by input string: AST fields are immutable once
628
+ # parsed, so the same IntArray can be shared across callers. Callers
629
+ # must treat the result as read-only.
630
+ def parse_id_list(s)
631
+ if @parse_id_cache.key?(s)
632
+ # Checked read: the guard proves the key present, so fetch keeps the
633
+ # static type `int` (not the maybe-missing int? the public `[]` now
634
+ # yields, #801 Phase 4) and the pool index stays non-null.
635
+ return @parse_id_pool[@parse_id_cache.fetch(s)]
636
+ end
637
+ result = []
638
+ if s != ""
639
+ bs = s.bytes
640
+ i = 0
641
+ n = bs.length
642
+ num = 0
643
+ while i < n
644
+ b = bs[i]
645
+ if b == 44 # ','
646
+ result.push(num)
647
+ num = 0
648
+ else
649
+ num = num * 10 + (b - 48)
650
+ end
651
+ i = i + 1
652
+ end
653
+ result.push(num)
654
+ end
655
+ @parse_id_cache[s] = @parse_id_pool.length
656
+ @parse_id_pool.push(result)
657
+ result
658
+ end
659
+
660
+ # The enclosing module's name when `self` denotes a module -- i.e.
661
+ # inside a module body or a `def self.x` module class-method.
662
+ # current_lexical_scope_name already yields the module name in both
663
+ # contexts (directly from @current_lexical_scope for a body, or by
664
+ # stripping `_cls_<m>` off @current_method_name for a class method);
665
+ # this just gates it on the scope actually being a module so `self`
666
+ # in a plain class isn't mistaken for a module singleton receiver.
667
+ # Returns "" when self is not a module. Used to route `self.<acc>` /
668
+ # `self.<acc> = v` to the same module-singleton-accessor slot that
669
+ # `Mod.<acc>` resolves to.
670
+ def current_module_scope
671
+ scope = current_lexical_scope_name
672
+ if scope != "" && module_name_exists(scope) == 1
673
+ return scope
674
+ end
675
+ ""
676
+ end
677
+
678
+ # ---- AST node table storage (parallel arrays by node ID) ----
679
+ # The 46 @nd_* arrays are initialized in each host's `initialize`
680
+ # and operated on here. Fields are listed explicitly (not via
681
+ # ivar reflection) because the spinel-self type inferencer reads
682
+ # the literal `@nd_X.push(0)` vs `@nd_X.push("")` shape to pick
683
+ # IntArray vs StrArray storage per slot.
684
+
685
+ def alloc_node
686
+ nid = @nd_count
687
+ @nd_type.push("")
688
+ @nd_name.push("")
689
+ @nd_value.push(0)
690
+ @nd_line.push(0) # keep the source-map arrays parallel with the rest, so a
691
+ @nd_file.push(0) # dynamically-allocated node can't drift them out of sync
692
+ @nd_col.push(0) # (and the self-host inferencer needs the literal push here)
693
+ @nd_content.push("")
694
+ @nd_flags.push(0)
695
+ @nd_operator.push("")
696
+ @nd_binop.push("")
697
+ @nd_callop.push("")
698
+ @nd_unescaped.push("")
699
+ @nd_receiver.push(-1)
700
+ @nd_arguments.push(-1)
701
+ @nd_body.push(-1)
702
+ @nd_block.push(-1)
703
+ @nd_parameters.push(-1)
704
+ @nd_predicate.push(-1)
705
+ @nd_subsequent.push(-1)
706
+ @nd_else_clause.push(-1)
707
+ @nd_left.push(-1)
708
+ @nd_right.push(-1)
709
+ @nd_constant_path.push(-1)
710
+ @nd_superclass.push(-1)
711
+ @nd_rest.push(-1)
712
+ @nd_keyword_rest.push(-1)
713
+ @nd_rescue_clause.push(-1)
714
+ @nd_ensure_clause.push(-1)
715
+ @nd_expression.push(-1)
716
+ @nd_target.push(-1)
717
+ @nd_pattern.push(-1)
718
+ @nd_key.push(-1)
719
+ @nd_reference.push(-1)
720
+ @nd_collection.push(-1)
721
+ @nd_stmts.push("")
722
+ @nd_args.push("")
723
+ @nd_requireds.push("")
724
+ @nd_optionals.push("")
725
+ @nd_keywords.push("")
726
+ @nd_elements.push("")
727
+ @nd_parts.push("")
728
+ @nd_conditions.push("")
729
+ @nd_exceptions.push("")
730
+ @nd_targets.push("")
731
+ @nd_rights.push("")
732
+ @nd_posts.push("")
733
+ @nd_new_name.push(-1)
734
+ @nd_old_name.push(-1)
735
+ @nd_names.push("")
736
+ @nd_inferred_type.push("")
737
+ @nd_scope_names.push("")
738
+ @nd_scope_types.push("")
739
+ @nd_rat_num.push("")
740
+ @nd_rat_den.push("")
741
+ @nd_count = @nd_count + 1
742
+ nid
743
+ end
744
+
745
+ # Bulk presize variant called by NodeTableLoader after Pass 1
746
+ # computes max node id. Allocates each parallel array to size `n`
747
+ # with its default fill value in one shot, avoiding ~46 * n
748
+ # individual Array#push calls (and the amortized realloc events
749
+ # that come with them). Field setters then write into preallocated
750
+ # slots by index.
751
+ def alloc_nodes(n)
752
+ @nd_type = Array.new(n, "")
753
+ @nd_name = Array.new(n, "")
754
+ @nd_value = Array.new(n, 0)
755
+ @nd_line = Array.new(n, 0)
756
+ @nd_file = Array.new(n, 0)
757
+ @nd_col = Array.new(n, 0)
758
+ @nd_content = Array.new(n, "")
759
+ @nd_flags = Array.new(n, 0)
760
+ @nd_operator = Array.new(n, "")
761
+ @nd_binop = Array.new(n, "")
762
+ @nd_callop = Array.new(n, "")
763
+ @nd_unescaped = Array.new(n, "")
764
+ @nd_receiver = Array.new(n, -1)
765
+ @nd_arguments = Array.new(n, -1)
766
+ @nd_body = Array.new(n, -1)
767
+ @nd_block = Array.new(n, -1)
768
+ @nd_parameters = Array.new(n, -1)
769
+ @nd_predicate = Array.new(n, -1)
770
+ @nd_subsequent = Array.new(n, -1)
771
+ @nd_else_clause = Array.new(n, -1)
772
+ @nd_left = Array.new(n, -1)
773
+ @nd_right = Array.new(n, -1)
774
+ @nd_constant_path = Array.new(n, -1)
775
+ @nd_superclass = Array.new(n, -1)
776
+ @nd_rest = Array.new(n, -1)
777
+ @nd_keyword_rest = Array.new(n, -1)
778
+ @nd_rescue_clause = Array.new(n, -1)
779
+ @nd_ensure_clause = Array.new(n, -1)
780
+ @nd_expression = Array.new(n, -1)
781
+ @nd_target = Array.new(n, -1)
782
+ @nd_pattern = Array.new(n, -1)
783
+ @nd_key = Array.new(n, -1)
784
+ @nd_reference = Array.new(n, -1)
785
+ @nd_collection = Array.new(n, -1)
786
+ @nd_stmts = Array.new(n, "")
787
+ @nd_args = Array.new(n, "")
788
+ @nd_requireds = Array.new(n, "")
789
+ @nd_optionals = Array.new(n, "")
790
+ @nd_keywords = Array.new(n, "")
791
+ @nd_elements = Array.new(n, "")
792
+ @nd_parts = Array.new(n, "")
793
+ @nd_conditions = Array.new(n, "")
794
+ @nd_exceptions = Array.new(n, "")
795
+ @nd_targets = Array.new(n, "")
796
+ @nd_rights = Array.new(n, "")
797
+ @nd_posts = Array.new(n, "")
798
+ @nd_new_name = Array.new(n, -1)
799
+ @nd_old_name = Array.new(n, -1)
800
+ @nd_names = Array.new(n, "")
801
+ @nd_inferred_type = Array.new(n, "")
802
+ @nd_scope_names = Array.new(n, "")
803
+ @nd_scope_types = Array.new(n, "")
804
+ # Issue #841: RationalNode literal slots.
805
+ @nd_rat_num = Array.new(n, "")
806
+ @nd_rat_den = Array.new(n, "")
807
+ @nd_count = n
808
+ end
809
+
810
+ def read_text_ast(data)
811
+ loader = NodeTableLoader.new(self)
812
+ loader.read_text_ast(data)
813
+ end
814
+
815
+ def set_root_id(root_id)
816
+ @root_id = root_id
817
+ end
818
+
819
+ # Issue #878: parser emits SOURCE_FILE near the top so __dir__
820
+ # (and similar compile-time helpers) can recover the path
821
+ # without scanning for SourceFileNode entries.
822
+ def set_source_file_path(path)
823
+ @source_file_path = path
824
+ end
825
+
826
+ def set_node_type(nid, node_type)
827
+ @nd_type[nid] = node_type
828
+ end
829
+
830
+ def set_node_content(nid, content)
831
+ @nd_content[nid] = content
832
+ end
833
+
834
+ # `if`-chain (not `case`) — `case` over many string literals
835
+ # measured ~58% slower on the codegen self-compile workload.
836
+ def set_string_field(nid, field, val)
837
+ if field == "name"
838
+ @nd_name[nid] = val
839
+ end
840
+ if field == "content"
841
+ @nd_content[nid] = val
842
+ end
843
+ if field == "value"
844
+ @nd_content[nid] = val
845
+ end
846
+ if field == "operator"
847
+ @nd_operator[nid] = val
848
+ end
849
+ if field == "binary_operator"
850
+ @nd_binop[nid] = val
851
+ end
852
+ if field == "call_operator"
853
+ @nd_callop[nid] = val
854
+ end
855
+ if field == "unescaped"
856
+ @nd_unescaped[nid] = val
857
+ end
858
+ if field == "kind"
859
+ # UnsupportedNode carries the Prism node-type name here so
860
+ # codegen can surface a precise compile error.
861
+ @nd_content[nid] = val
862
+ end
863
+ # Issue #841: RationalNode carries numerator and denominator
864
+ # as decimal-text strings (loaded into separate slots so
865
+ # codegen can synthesize sp_rational_new(num, den) literals).
866
+ if field == "rat_num"
867
+ @nd_rat_num[nid] = val
868
+ end
869
+ if field == "rat_den"
870
+ @nd_rat_den[nid] = val
871
+ end
872
+ end
873
+
874
+ def set_int_field(nid, field, val)
875
+ if field == "value"
876
+ @nd_value[nid] = val
877
+ end
878
+ if field == "flags"
879
+ @nd_flags[nid] = val
880
+ end
881
+ if field == "number"
882
+ @nd_value[nid] = val
883
+ end
884
+ if field == "maximum"
885
+ @nd_value[nid] = val
886
+ end
887
+ if field == "start_line"
888
+ @nd_value[nid] = val
889
+ end
890
+ if field == "source_line"
891
+ # UnsupportedNode carries the source line so codegen can cite
892
+ # location in the compile error.
893
+ @nd_value[nid] = val
894
+ end
895
+ # Debug builds only (SPINEL_DEBUG=1): the parser stamps every node
896
+ # with its 1-based source line in a dedicated slot so codegen can
897
+ # emit `#line` directives. Kept separate from @nd_value, which is
898
+ # overloaded for integer/float literal values, numbered-param max, etc.
899
+ if field == "node_line"
900
+ @nd_line[nid] = val
901
+ end
902
+ # Debug multi-file map: id into the FILE table (0 = toplevel source).
903
+ if field == "node_file"
904
+ @nd_file[nid] = val
905
+ end
906
+ # Debug/types export: 0-based source column for hover position keys.
907
+ if field == "node_col"
908
+ @nd_col[nid] = val
909
+ end
910
+ end
911
+
912
+ # Debug multi-file map: record a FILE <id> <path> table entry emitted by
913
+ # the parser. Grown on demand so ids can arrive in any order.
914
+ def set_file_entry(id, path)
915
+ # The analyze/codegen consumers initialize @file_table = []; this shared
916
+ # helper assumes the slot exists. A bare `@file_table ||= []` fallback is
917
+ # unsafe under self-host inference: the empty literal lowers to IntArray
918
+ # and collides with the PolyArray-typed slot, breaking the build.
919
+ while @file_table.length <= id
920
+ @file_table.push("")
921
+ end
922
+ @file_table[id] = path
923
+ end
924
+
925
+ def set_ref_field(nid, field, ref_id)
926
+ if field == "receiver"
927
+ @nd_receiver[nid] = ref_id
928
+ end
929
+ if field == "arguments"
930
+ @nd_arguments[nid] = ref_id
931
+ end
932
+ if field == "body"
933
+ @nd_body[nid] = ref_id
934
+ end
935
+ if field == "block"
936
+ @nd_block[nid] = ref_id
937
+ end
938
+ if field == "parameters"
939
+ @nd_parameters[nid] = ref_id
940
+ end
941
+ if field == "predicate"
942
+ @nd_predicate[nid] = ref_id
943
+ end
944
+ if field == "subsequent"
945
+ @nd_subsequent[nid] = ref_id
946
+ end
947
+ if field == "else_clause"
948
+ @nd_else_clause[nid] = ref_id
949
+ end
950
+ if field == "left"
951
+ @nd_left[nid] = ref_id
952
+ end
953
+ if field == "right"
954
+ @nd_right[nid] = ref_id
955
+ end
956
+ if field == "constant_path"
957
+ @nd_constant_path[nid] = ref_id
958
+ end
959
+ if field == "superclass"
960
+ @nd_superclass[nid] = ref_id
961
+ end
962
+ if field == "rest"
963
+ @nd_rest[nid] = ref_id
964
+ end
965
+ if field == "keyword_rest"
966
+ @nd_keyword_rest[nid] = ref_id
967
+ end
968
+ if field == "rescue_clause"
969
+ @nd_rescue_clause[nid] = ref_id
970
+ end
971
+ if field == "ensure_clause"
972
+ @nd_ensure_clause[nid] = ref_id
973
+ end
974
+ if field == "expression"
975
+ @nd_expression[nid] = ref_id
976
+ end
977
+ # Issue #840: ImaginaryNode "numeric" field carries the imaginary
978
+ # coefficient (IntegerNode or FloatNode); reuse the @nd_expression
979
+ # slot so codegen reads it the same way.
980
+ if field == "numeric"
981
+ @nd_expression[nid] = ref_id
982
+ end
983
+ if field == "target"
984
+ @nd_target[nid] = ref_id
985
+ end
986
+ if field == "pattern"
987
+ @nd_pattern[nid] = ref_id
988
+ end
989
+ if field == "key"
990
+ @nd_key[nid] = ref_id
991
+ end
992
+ if field == "reference"
993
+ @nd_reference[nid] = ref_id
994
+ end
995
+ if field == "collection"
996
+ @nd_collection[nid] = ref_id
997
+ end
998
+ if field == "statements"
999
+ @nd_body[nid] = ref_id
1000
+ end
1001
+ if field == "value"
1002
+ @nd_expression[nid] = ref_id
1003
+ end
1004
+ if field == "index"
1005
+ @nd_target[nid] = ref_id
1006
+ end
1007
+ if field == "parent"
1008
+ @nd_receiver[nid] = ref_id
1009
+ end
1010
+ if field == "rescue_expression"
1011
+ @nd_else_clause[nid] = ref_id
1012
+ end
1013
+ if field == "call"
1014
+ @nd_receiver[nid] = ref_id
1015
+ end
1016
+ if field == "new_name"
1017
+ # AliasMethodNode / AliasGlobalVariableNode -- the new-name slot
1018
+ # (a SymbolNode for methods, GlobalVariableReadNode for globals).
1019
+ @nd_new_name[nid] = ref_id
1020
+ end
1021
+ if field == "old_name"
1022
+ @nd_old_name[nid] = ref_id
1023
+ end
1024
+ end
1025
+
1026
+ def set_array_field(nid, field, ids_str)
1027
+ if field == "body"
1028
+ @nd_stmts[nid] = ids_str
1029
+ end
1030
+ if field == "arguments"
1031
+ @nd_args[nid] = ids_str
1032
+ end
1033
+ if field == "requireds"
1034
+ @nd_requireds[nid] = ids_str
1035
+ end
1036
+ if field == "optionals"
1037
+ @nd_optionals[nid] = ids_str
1038
+ end
1039
+ if field == "keywords"
1040
+ @nd_keywords[nid] = ids_str
1041
+ end
1042
+ if field == "elements"
1043
+ @nd_elements[nid] = ids_str
1044
+ end
1045
+ if field == "parts"
1046
+ @nd_parts[nid] = ids_str
1047
+ end
1048
+ if field == "conditions"
1049
+ @nd_conditions[nid] = ids_str
1050
+ end
1051
+ if field == "exceptions"
1052
+ @nd_exceptions[nid] = ids_str
1053
+ end
1054
+ if field == "lefts"
1055
+ @nd_targets[nid] = ids_str
1056
+ end
1057
+ if field == "targets"
1058
+ @nd_targets[nid] = ids_str
1059
+ end
1060
+ if field == "rights"
1061
+ @nd_rights[nid] = ids_str
1062
+ end
1063
+ if field == "posts"
1064
+ @nd_posts[nid] = ids_str
1065
+ end
1066
+ if field == "names"
1067
+ # UndefNode -- list of SymbolNode names to undef.
1068
+ @nd_names[nid] = ids_str
1069
+ end
1070
+ end
1071
+
1072
+ # Membership test for the self-recursive-yield registry (populated by
1073
+ # analyze's detect_lowered_yield_methods, serialized to IR, read by
1074
+ # both passes). `key` is "<ClassName>#<method>" / "#<method>".
1075
+ def is_lowered_yield_method(key)
1076
+ if @lowered_yield_methods == nil
1077
+ return 0
1078
+ end
1079
+ if not_in(key, @lowered_yield_methods) == 0
1080
+ return 1
1081
+ end
1082
+ 0
1083
+ end
1084
+
1085
+ # True when the method currently being emitted/analyzed is a lowered
1086
+ # self-recursive yield method (its `yield`s call the synthetic
1087
+ # `__yblk__` proc param). Built from @current_class_idx /
1088
+ # @current_method_name so it stays valid inside a forwarded proc
1089
+ # literal body (those don't reset the enclosing-method state).
1090
+ def current_method_is_lowered?
1091
+ if @current_method_name == nil || @current_method_name == ""
1092
+ return 0
1093
+ end
1094
+ cls = ""
1095
+ if @current_class_idx >= 0 && @current_class_idx < @cls_names.length
1096
+ cls = @cls_names[@current_class_idx]
1097
+ end
1098
+ is_lowered_yield_method(cls + "#" + @current_method_name)
1099
+ end
1100
+
1101
+ # ---- Convenience: get stmts of a body node ----
1102
+ def get_stmts(nid)
1103
+ if nid < 0
1104
+ return []
1105
+ end
1106
+ # If it's a StatementsNode, return its stmts
1107
+ if @nd_type[nid] == "StatementsNode"
1108
+ return parse_id_list(@nd_stmts[nid])
1109
+ end
1110
+ # Otherwise return single-element array
1111
+ result = []
1112
+ result.push(nid)
1113
+ result
1114
+ end
1115
+
1116
+ # Resolve `class CONST` (and `module`) where CONST is a constant
1117
+ # aliased to an existing class via `CONST = SomeClass` or
1118
+ # `CONST = <literal-or-class>.class`, so the body reopens that class
1119
+ # rather than defining a fresh one named after the alias (#1036:
1120
+ # `INTEGER_KLASS = 1.class; class INTEGER_KLASS; include M; end`).
1121
+ #
1122
+ # Runs in BOTH analyze and codegen (each loads its own AST) before any
1123
+ # class collection, and rewrites the ClassNode's constant_path name in
1124
+ # place. Doing it at the source means every downstream name derivation
1125
+ # sees the resolved name -- no half-applied alias where methods land
1126
+ # on one class index and dispatch resolves another.
1127
+ def resolve_class_aliases
1128
+ root = @root_id
1129
+ if @nd_type[root] != "ProgramNode"
1130
+ return
1131
+ end
1132
+ class_names = "".split(",", -1)
1133
+ collect_classnode_names(root, class_names)
1134
+ amap_from = "".split(",", -1)
1135
+ amap_to = "".split(",", -1)
1136
+ build_class_alias_map(root, class_names, amap_from, amap_to)
1137
+ if amap_from.length == 0
1138
+ return
1139
+ end
1140
+ rewrite_class_alias_refs(root, amap_from, amap_to)
1141
+ end
1142
+
1143
+ def collect_classnode_names(nid, acc)
1144
+ if nid < 0
1145
+ return
1146
+ end
1147
+ if @nd_type[nid] == "ClassNode"
1148
+ cp = @nd_constant_path[nid]
1149
+ if cp >= 0 && @nd_type[cp] == "ConstantReadNode"
1150
+ nm = @nd_name[cp]
1151
+ if not_in(nm, acc) == 1
1152
+ acc.push(nm)
1153
+ end
1154
+ end
1155
+ end
1156
+ kids = []
1157
+ push_child_ids(nid, kids)
1158
+ k = 0
1159
+ while k < kids.length
1160
+ collect_classnode_names(kids[k], acc)
1161
+ k = k + 1
1162
+ end
1163
+ end
1164
+
1165
+ # The class a literal node is an instance of, for `<lit>.class`.
1166
+ def literal_class_name(nid)
1167
+ if nid < 0
1168
+ return ""
1169
+ end
1170
+ t = @nd_type[nid]
1171
+ if t == "IntegerNode"
1172
+ return "Integer"
1173
+ end
1174
+ if t == "FloatNode"
1175
+ return "Float"
1176
+ end
1177
+ if t == "StringNode"
1178
+ return "String"
1179
+ end
1180
+ if t == "SymbolNode"
1181
+ return "Symbol"
1182
+ end
1183
+ if t == "ArrayNode"
1184
+ return "Array"
1185
+ end
1186
+ if t == "HashNode"
1187
+ return "Hash"
1188
+ end
1189
+ if t == "RegularExpressionNode"
1190
+ return "Regexp"
1191
+ end
1192
+ if t == "TrueNode"
1193
+ return "TrueClass"
1194
+ end
1195
+ if t == "FalseNode"
1196
+ return "FalseClass"
1197
+ end
1198
+ if t == "NilNode"
1199
+ return "NilClass"
1200
+ end
1201
+ ""
1202
+ end
1203
+
1204
+ def is_builtin_class_const(name)
1205
+ builtins = "Integer;Float;String;Symbol;Array;Hash;Object;BasicObject;Numeric;Regexp;Range;Proc;Exception;StandardError;Comparable;Enumerable;Kernel;Module;Class".split(";", -1)
1206
+ if not_in(name, builtins) == 0
1207
+ return 1
1208
+ end
1209
+ 0
1210
+ end
1211
+
1212
+ # Resolve a constant's RHS value-node to the class name it aliases, or
1213
+ # "" when it isn't a class alias.
1214
+ def class_alias_target(rhs, class_names)
1215
+ if rhs < 0
1216
+ return ""
1217
+ end
1218
+ t = @nd_type[rhs]
1219
+ if t == "ConstantReadNode"
1220
+ nm = @nd_name[rhs]
1221
+ if not_in(nm, class_names) == 0 || is_builtin_class_const(nm) == 1
1222
+ return nm
1223
+ end
1224
+ return ""
1225
+ end
1226
+ if t == "CallNode" && @nd_name[rhs] == "class"
1227
+ recv = @nd_receiver[rhs]
1228
+ if recv < 0
1229
+ return ""
1230
+ end
1231
+ lc = literal_class_name(recv)
1232
+ if lc != ""
1233
+ return lc
1234
+ end
1235
+ if @nd_type[recv] == "ConstantReadNode"
1236
+ rnm = @nd_name[recv]
1237
+ if not_in(rnm, class_names) == 0 || is_builtin_class_const(rnm) == 1
1238
+ return rnm
1239
+ end
1240
+ end
1241
+ end
1242
+ ""
1243
+ end
1244
+
1245
+ def build_class_alias_map(nid, class_names, amap_from, amap_to)
1246
+ if nid < 0
1247
+ return
1248
+ end
1249
+ if @nd_type[nid] == "ConstantWriteNode"
1250
+ cname = @nd_name[nid]
1251
+ tgt = class_alias_target(@nd_expression[nid], class_names)
1252
+ # Only treat it as a class alias when it resolves to a DIFFERENT
1253
+ # name (`Foo = Foo` / a class's own const are not aliases) and isn't
1254
+ # already recorded.
1255
+ if tgt != "" && tgt != cname && not_in(cname, amap_from) == 1
1256
+ amap_from.push(cname)
1257
+ amap_to.push(tgt)
1258
+ end
1259
+ end
1260
+ kids = []
1261
+ push_child_ids(nid, kids)
1262
+ k = 0
1263
+ while k < kids.length
1264
+ build_class_alias_map(kids[k], class_names, amap_from, amap_to)
1265
+ k = k + 1
1266
+ end
1267
+ end
1268
+
1269
+ def rewrite_class_alias_refs(nid, amap_from, amap_to)
1270
+ if nid < 0
1271
+ return
1272
+ end
1273
+ if @nd_type[nid] == "ClassNode"
1274
+ cp = @nd_constant_path[nid]
1275
+ if cp >= 0 && @nd_type[cp] == "ConstantReadNode"
1276
+ nm = @nd_name[cp]
1277
+ ai = 0
1278
+ while ai < amap_from.length
1279
+ if amap_from[ai] == nm
1280
+ set_string_field(cp, "name", amap_to[ai])
1281
+ ai = amap_from.length
1282
+ end
1283
+ ai = ai + 1
1284
+ end
1285
+ end
1286
+ end
1287
+ kids = []
1288
+ push_child_ids(nid, kids)
1289
+ k = 0
1290
+ while k < kids.length
1291
+ rewrite_class_alias_refs(kids[k], amap_from, amap_to)
1292
+ k = k + 1
1293
+ end
1294
+ end
1295
+
1296
+ # ---- Module#instance_methods(false) const-fold support ----
1297
+ # `Klass.instance_methods(false)` reports a class/module's own (non-
1298
+ # inherited) instance-method names. For a *compiled* user class/module
1299
+ # that set is statically known, so the call folds to a literal symbol
1300
+ # array. These helpers are shared so the analyze pass (symbol-table
1301
+ # registration + result typing) and the codegen pass (the fold) agree
1302
+ # exactly -- a name set or gate that drifted between passes would emit
1303
+ # a `sym_array`-typed slot the other side can't populate.
1304
+
1305
+ # Resolved const name iff `nid` is a foldable
1306
+ # `<ConstantRead>.instance_methods(false)` call, else "". Receiver
1307
+ # resolution is context-free (the raw constant name) on purpose: the
1308
+ # gate must be identical in a flat symbol-collection walk and in a
1309
+ # class-scoped emit, so it deliberately does NOT consult lexical
1310
+ # scope. ConstantPath receivers and the no-arg / `true` forms fall
1311
+ # through unfolded (and stay untyped), matching today's behaviour.
1312
+ def instance_methods_fold_target(nid)
1313
+ recv = @nd_receiver[nid]
1314
+ if recv < 0 || @nd_type[recv] != "ConstantReadNode"
1315
+ return ""
1316
+ end
1317
+ aid = @nd_arguments[nid]
1318
+ if aid < 0
1319
+ return ""
1320
+ end
1321
+ aargs = get_args(aid)
1322
+ if aargs.length != 1 || @nd_type[aargs[0]] != "FalseNode"
1323
+ return ""
1324
+ end
1325
+ cn = @nd_name[recv]
1326
+ if instance_methods_fold_const?(cn) == 0
1327
+ return ""
1328
+ end
1329
+ cn
1330
+ end
1331
+
1332
+ # 1 iff `cname` is a user-defined class or module whose own instance-
1333
+ # method set is statically known. Built-in classes (Integer, String,
1334
+ # ...) aren't in @cls_names, so they fall through -- spinel can't
1335
+ # enumerate their native method tables.
1336
+ def instance_methods_fold_const?(cname)
1337
+ if cname == ""
1338
+ return 0
1339
+ end
1340
+ if find_class_idx(cname) >= 0
1341
+ return 1
1342
+ end
1343
+ mi = 0
1344
+ while mi < @module_names.length
1345
+ if @module_names[mi] == cname
1346
+ return 1
1347
+ end
1348
+ mi = mi + 1
1349
+ end
1350
+ 0
1351
+ end
1352
+
1353
+ # Ordered, de-duplicated own instance-method names (as strings) for a
1354
+ # foldable const. Class: attr readers + `=`-suffixed writers + method
1355
+ # table (matches class_has_method_local, which method_defined? uses).
1356
+ # Module: body `def`s excluding `def self.x` and module_function
1357
+ # promotions, plus attr accessors. spinel doesn't model visibility, so
1358
+ # private defs are included -- consistent with method_defined?.
1359
+ def instance_methods_own_names(cname)
1360
+ acc = "".split(";", -1)
1361
+ ci = find_class_idx(cname)
1362
+ if ci >= 0
1363
+ im_push_names(acc, @cls_attr_readers[ci].split(";", -1), "")
1364
+ im_push_names(acc, @cls_attr_writers[ci].split(";", -1), "=")
1365
+ im_push_names(acc, @cls_meth_names[ci].split(";", -1), "")
1366
+ return acc
1367
+ end
1368
+ mi = 0
1369
+ while mi < @module_names.length
1370
+ if @module_names[mi] == cname && mi < @module_body_ids.length
1371
+ im_push_module_body(acc, @module_body_ids[mi])
1372
+ end
1373
+ mi = mi + 1
1374
+ end
1375
+ acc
1376
+ end
1377
+
1378
+ # Backing ivar base-name for an attr_reader. For a normal reader this
1379
+ # is the reader name itself; for a reader created by `alias new old`
1380
+ # (or `alias_method :new, :old`) where `old` is an attr_reader, it is
1381
+ # `old`'s backing ivar so `obj.new` reads the source slot rather than a
1382
+ # nonexistent `@new`. Walks the parent chain like cls_has_attr_reader.
1383
+ # The identity default keeps every non-aliased reader unchanged, so
1384
+ # this is purely additive for code that doesn't alias accessors.
1385
+ def attr_reader_ivar(ci, mname)
1386
+ if ci < 0
1387
+ return mname
1388
+ end
1389
+ key = @cls_names[ci] + "#" + mname
1390
+ i = 0
1391
+ while i < @attr_alias_keys.length
1392
+ if @attr_alias_keys[i] == key
1393
+ return @attr_alias_ivars[i]
1394
+ end
1395
+ i = i + 1
1396
+ end
1397
+ # If `ci` declares this reader directly (a plain attr_reader, not via
1398
+ # the parent), its backing ivar is the reader name itself — a subclass
1399
+ # redeclaring a name must not inherit a parent's alias backing.
1400
+ own = @cls_attr_readers[ci].split(";", -1)
1401
+ di = 0
1402
+ while di < own.length
1403
+ if own[di] == mname
1404
+ return mname
1405
+ end
1406
+ di = di + 1
1407
+ end
1408
+ if @cls_parents[ci] != ""
1409
+ pi = find_class_idx(@cls_parents[ci])
1410
+ if pi >= 0
1411
+ return attr_reader_ivar(pi, mname)
1412
+ end
1413
+ end
1414
+ mname
1415
+ end
1416
+
1417
+ def im_push_names(acc, names, suffix)
1418
+ k = 0
1419
+ while k < names.length
1420
+ if names[k] != ""
1421
+ full = names[k] + suffix
1422
+ if not_in(full, acc) == 1
1423
+ acc.push(full)
1424
+ end
1425
+ end
1426
+ k = k + 1
1427
+ end
1428
+ end
1429
+
1430
+ def im_push_module_body(acc, body)
1431
+ if body < 0
1432
+ return
1433
+ end
1434
+ stmts = get_stmts(body)
1435
+ # Pre-scan `module_function :a, :b` named promotions: those defs
1436
+ # become class methods, not instance methods.
1437
+ mf_named = "".split(";", -1)
1438
+ si = 0
1439
+ while si < stmts.length
1440
+ sid = stmts[si]
1441
+ if @nd_type[sid] == "CallNode" && @nd_receiver[sid] < 0 && @nd_name[sid] == "module_function"
1442
+ aid = @nd_arguments[sid]
1443
+ if aid >= 0
1444
+ margs = get_args(aid)
1445
+ mk = 0
1446
+ while mk < margs.length
1447
+ if @nd_type[margs[mk]] == "SymbolNode" || @nd_type[margs[mk]] == "StringNode"
1448
+ mf_named.push(@nd_content[margs[mk]])
1449
+ end
1450
+ mk = mk + 1
1451
+ end
1452
+ end
1453
+ end
1454
+ si = si + 1
1455
+ end
1456
+ # `module_function` (no args) flips subsequent bare `def`s into
1457
+ # class methods. `def self.x` is always a class method.
1458
+ in_mf = 0
1459
+ si = 0
1460
+ while si < stmts.length
1461
+ sid = stmts[si]
1462
+ t = @nd_type[sid]
1463
+ if t == "CallNode" && @nd_receiver[sid] < 0
1464
+ cn = @nd_name[sid]
1465
+ if cn == "module_function"
1466
+ aid2 = @nd_arguments[sid]
1467
+ if aid2 < 0 || get_args(aid2).length == 0
1468
+ in_mf = 1
1469
+ end
1470
+ end
1471
+ if cn == "attr_reader" || cn == "attr_accessor"
1472
+ im_push_attr_args(acc, sid, "")
1473
+ end
1474
+ if cn == "attr_writer" || cn == "attr_accessor"
1475
+ im_push_attr_args(acc, sid, "=")
1476
+ end
1477
+ end
1478
+ if t == "DefNode" && @nd_receiver[sid] < 0 && in_mf == 0
1479
+ dn = @nd_name[sid]
1480
+ if not_in(dn, mf_named) == 1 && not_in(dn, acc) == 1
1481
+ acc.push(dn)
1482
+ end
1483
+ end
1484
+ si = si + 1
1485
+ end
1486
+ end
1487
+
1488
+ def im_push_attr_args(acc, sid, suffix)
1489
+ aid = @nd_arguments[sid]
1490
+ if aid < 0
1491
+ return
1492
+ end
1493
+ aargs = get_args(aid)
1494
+ k = 0
1495
+ while k < aargs.length
1496
+ if @nd_type[aargs[k]] == "SymbolNode" || @nd_type[aargs[k]] == "StringNode"
1497
+ full = @nd_content[aargs[k]] + suffix
1498
+ if not_in(full, acc) == 1
1499
+ acc.push(full)
1500
+ end
1501
+ end
1502
+ k = k + 1
1503
+ end
1504
+ end
1505
+
1506
+ end