rubyduino 0.1.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 (735) hide show
  1. checksums.yaml +7 -0
  2. data/.gitmodules +3 -0
  3. data/CHANGELOG.md +9 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +72 -0
  6. data/Rakefile +12 -0
  7. data/bin/rubyduino +186 -0
  8. data/examples/hello.rb +9 -0
  9. data/lib/rubyduino/arduino_entry.c +9 -0
  10. data/lib/rubyduino/sp_runtime.h +159 -0
  11. data/lib/rubyduino/spinel.rb +8 -0
  12. data/lib/rubyduino/spinel_arduino_codegen.rb +129 -0
  13. data/lib/rubyduino/version.rb +5 -0
  14. data/lib/rubyduino.rb +9 -0
  15. data/sig/rubyduino.rbs +4 -0
  16. data/vendor/spinel/AUTHORS +1 -0
  17. data/vendor/spinel/LICENSE +19 -0
  18. data/vendor/spinel/Makefile +406 -0
  19. data/vendor/spinel/POLY-AS-SET.md +217 -0
  20. data/vendor/spinel/README.md +409 -0
  21. data/vendor/spinel/benchmark/bm_ackermann.rb +12 -0
  22. data/vendor/spinel/benchmark/bm_ao_render.rb +323 -0
  23. data/vendor/spinel/benchmark/bm_attr_accessor.rb +41 -0
  24. data/vendor/spinel/benchmark/bm_bigint_fib.rb +10 -0
  25. data/vendor/spinel/benchmark/bm_binary_trees.rb +53 -0
  26. data/vendor/spinel/benchmark/bm_csv_process.rb +58 -0
  27. data/vendor/spinel/benchmark/bm_fannkuch.rb +88 -0
  28. data/vendor/spinel/benchmark/bm_fasta.rb +87 -0
  29. data/vendor/spinel/benchmark/bm_fib.rb +9 -0
  30. data/vendor/spinel/benchmark/bm_gcbench.rb +73 -0
  31. data/vendor/spinel/benchmark/bm_getivar.rb +34 -0
  32. data/vendor/spinel/benchmark/bm_getivar_module.rb +34 -0
  33. data/vendor/spinel/benchmark/bm_huffman.rb +141 -0
  34. data/vendor/spinel/benchmark/bm_inline.rb +68 -0
  35. data/vendor/spinel/benchmark/bm_io_wordcount.rb +57 -0
  36. data/vendor/spinel/benchmark/bm_json_parse.rb +157 -0
  37. data/vendor/spinel/benchmark/bm_keyword_args.rb +23 -0
  38. data/vendor/spinel/benchmark/bm_life.rb +70 -0
  39. data/vendor/spinel/benchmark/bm_linked_list.rb +75 -0
  40. data/vendor/spinel/benchmark/bm_loops_times.rb +16 -0
  41. data/vendor/spinel/benchmark/bm_mandel_term.rb +34 -0
  42. data/vendor/spinel/benchmark/bm_matmul.rb +42 -0
  43. data/vendor/spinel/benchmark/bm_nbody.rb +115 -0
  44. data/vendor/spinel/benchmark/bm_nested_loop.rb +29 -0
  45. data/vendor/spinel/benchmark/bm_nqueens.rb +46 -0
  46. data/vendor/spinel/benchmark/bm_object_new.rb +21 -0
  47. data/vendor/spinel/benchmark/bm_object_new_init.rb +21 -0
  48. data/vendor/spinel/benchmark/bm_object_new_no_escape.rb +28 -0
  49. data/vendor/spinel/benchmark/bm_partial_sums.rb +38 -0
  50. data/vendor/spinel/benchmark/bm_pidigits.rb +31 -0
  51. data/vendor/spinel/benchmark/bm_rbtree.rb +100 -0
  52. data/vendor/spinel/benchmark/bm_ruby_xor.rb +28 -0
  53. data/vendor/spinel/benchmark/bm_send_bmethod.rb +31 -0
  54. data/vendor/spinel/benchmark/bm_send_cfunc_block.rb +18 -0
  55. data/vendor/spinel/benchmark/bm_send_rubyfunc_block.rb +23 -0
  56. data/vendor/spinel/benchmark/bm_setivar.rb +33 -0
  57. data/vendor/spinel/benchmark/bm_setivar_object.rb +33 -0
  58. data/vendor/spinel/benchmark/bm_setivar_young.rb +37 -0
  59. data/vendor/spinel/benchmark/bm_sieve.rb +23 -0
  60. data/vendor/spinel/benchmark/bm_so_lists.rb +47 -0
  61. data/vendor/spinel/benchmark/bm_so_mandelbrot.rb +65 -0
  62. data/vendor/spinel/benchmark/bm_spectral_norm.rb +71 -0
  63. data/vendor/spinel/benchmark/bm_splay.rb +128 -0
  64. data/vendor/spinel/benchmark/bm_str_concat.rb +15 -0
  65. data/vendor/spinel/benchmark/bm_structaref.rb +25 -0
  66. data/vendor/spinel/benchmark/bm_structaset.rb +24 -0
  67. data/vendor/spinel/benchmark/bm_sudoku.rb +217 -0
  68. data/vendor/spinel/benchmark/bm_tak.rb +10 -0
  69. data/vendor/spinel/benchmark/bm_tarai.rb +10 -0
  70. data/vendor/spinel/benchmark/bm_template.rb +50 -0
  71. data/vendor/spinel/benchmark/bm_throw.rb +25 -0
  72. data/vendor/spinel/benchmark/bm_wordfreq.rb +43 -0
  73. data/vendor/spinel/docs/FFI.md +198 -0
  74. data/vendor/spinel/examples/ffi/libm/README.md +24 -0
  75. data/vendor/spinel/examples/ffi/libm/libm.rb +17 -0
  76. data/vendor/spinel/examples/ffi/sqlite/README.md +73 -0
  77. data/vendor/spinel/examples/ffi/sqlite/blog.rb +185 -0
  78. data/vendor/spinel/examples/ffi/sqlite/sqlite3_lib.rb +46 -0
  79. data/vendor/spinel/lib/erb.rb +19 -0
  80. data/vendor/spinel/lib/forwardable.rb +8 -0
  81. data/vendor/spinel/lib/mruby_shim.h +118 -0
  82. data/vendor/spinel/lib/optparse.rb +123 -0
  83. data/vendor/spinel/lib/regexp/re_compile.c +979 -0
  84. data/vendor/spinel/lib/regexp/re_exec.c +665 -0
  85. data/vendor/spinel/lib/regexp/re_internal.h +146 -0
  86. data/vendor/spinel/lib/regexp/re_utf8.c +76 -0
  87. data/vendor/spinel/lib/set.rb +12 -0
  88. data/vendor/spinel/lib/sp_bigint.c +5400 -0
  89. data/vendor/spinel/lib/sp_bigint.h +117 -0
  90. data/vendor/spinel/lib/sp_runtime.h +1361 -0
  91. data/vendor/spinel/lib/stringio.c +286 -0
  92. data/vendor/spinel/lib/stringio.rb +5 -0
  93. data/vendor/spinel/lib/strscan.c +170 -0
  94. data/vendor/spinel/lib/strscan.rb +55 -0
  95. data/vendor/spinel/spinel +191 -0
  96. data/vendor/spinel/spinel.bat +158 -0
  97. data/vendor/spinel/spinel_codegen.rb +39906 -0
  98. data/vendor/spinel/spinel_parse +0 -0
  99. data/vendor/spinel/spinel_parse.c +1586 -0
  100. data/vendor/spinel/test/alias_global.rb +16 -0
  101. data/vendor/spinel/test/alias_global.rb.expected +3 -0
  102. data/vendor/spinel/test/alias_method.rb +28 -0
  103. data/vendor/spinel/test/alias_method.rb.expected +5 -0
  104. data/vendor/spinel/test/and_node_poly_operand.rb +24 -0
  105. data/vendor/spinel/test/anon_block_forward.rb +47 -0
  106. data/vendor/spinel/test/anon_block_forward.rb.expected +4 -0
  107. data/vendor/spinel/test/array_3d_nested.rb +48 -0
  108. data/vendor/spinel/test/array_clear_typed.rb +40 -0
  109. data/vendor/spinel/test/array_clear_typed.rb.expected +7 -0
  110. data/vendor/spinel/test/array_concat.rb +18 -0
  111. data/vendor/spinel/test/array_concat.rb.expected +2 -0
  112. data/vendor/spinel/test/array_each_with_object.rb +17 -0
  113. data/vendor/spinel/test/array_each_with_object.rb.expected +2 -0
  114. data/vendor/spinel/test/array_fill_poly.rb +17 -0
  115. data/vendor/spinel/test/array_flat_map.rb +16 -0
  116. data/vendor/spinel/test/array_flat_map.rb.expected +2 -0
  117. data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb +29 -0
  118. data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb.expected +6 -0
  119. data/vendor/spinel/test/array_method_name_clash.rb +15 -0
  120. data/vendor/spinel/test/array_method_name_clash.rb.expected +1 -0
  121. data/vendor/spinel/test/array_new_block_typed_container.rb +37 -0
  122. data/vendor/spinel/test/array_new_block_typed_container.rb.expected +7 -0
  123. data/vendor/spinel/test/array_new_empty_inner_deferred.rb +47 -0
  124. data/vendor/spinel/test/array_new_empty_inner_deferred.rb.expected +8 -0
  125. data/vendor/spinel/test/array_partition_gc.rb +20 -0
  126. data/vendor/spinel/test/array_partition_gc.rb.expected +3 -0
  127. data/vendor/spinel/test/array_plus.rb +18 -0
  128. data/vendor/spinel/test/array_plus.rb.expected +2 -0
  129. data/vendor/spinel/test/array_rotate_bang.rb +54 -0
  130. data/vendor/spinel/test/array_rotate_bang.rb.expected +34 -0
  131. data/vendor/spinel/test/array_shuffle_ptr.rb +11 -0
  132. data/vendor/spinel/test/array_shuffle_ptr.rb.expected +1 -0
  133. data/vendor/spinel/test/array_slice_bang.rb +81 -0
  134. data/vendor/spinel/test/array_slice_bang.rb.expected +40 -0
  135. data/vendor/spinel/test/attr.rb +77 -0
  136. data/vendor/spinel/test/attr.rb.expected +9 -0
  137. data/vendor/spinel/test/attr_writer_poly_box.rb +24 -0
  138. data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb +29 -0
  139. data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb.expected +3 -0
  140. data/vendor/spinel/test/attr_writer_returns_rhs.rb +23 -0
  141. data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb +38 -0
  142. data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb.expected +3 -0
  143. data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb +36 -0
  144. data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb.expected +2 -0
  145. data/vendor/spinel/test/back_ref.rb +21 -0
  146. data/vendor/spinel/test/back_ref.rb.expected +6 -0
  147. data/vendor/spinel/test/bare_return_in_cls_method.rb +46 -0
  148. data/vendor/spinel/test/bare_return_in_cls_method.rb.expected +2 -0
  149. data/vendor/spinel/test/bare_return_in_initialize.rb +55 -0
  150. data/vendor/spinel/test/bare_return_in_initialize.rb.expected +4 -0
  151. data/vendor/spinel/test/bare_return_in_poly_method.rb +26 -0
  152. data/vendor/spinel/test/bare_return_in_poly_method.rb.expected +2 -0
  153. data/vendor/spinel/test/bigint_div_by_zero.rb +43 -0
  154. data/vendor/spinel/test/bigint_div_by_zero.rb.expected +3 -0
  155. data/vendor/spinel/test/block2.rb +31 -0
  156. data/vendor/spinel/test/block2.rb.expected +4 -0
  157. data/vendor/spinel/test/block_forward_block_arg.rb +60 -0
  158. data/vendor/spinel/test/block_forward_block_arg.rb.expected +4 -0
  159. data/vendor/spinel/test/block_forward_recv_typed.rb +82 -0
  160. data/vendor/spinel/test/block_forward_recv_typed.rb.expected +11 -0
  161. data/vendor/spinel/test/block_forward_self_call.rb +61 -0
  162. data/vendor/spinel/test/block_forward_self_call.rb.expected +6 -0
  163. data/vendor/spinel/test/block_given_block_param.rb +46 -0
  164. data/vendor/spinel/test/block_given_block_param.rb.expected +3 -0
  165. data/vendor/spinel/test/block_param_shadow.rb +246 -0
  166. data/vendor/spinel/test/block_param_shadow.rb.expected +71 -0
  167. data/vendor/spinel/test/bm_instance_eval.rb +209 -0
  168. data/vendor/spinel/test/bm_instance_eval.rb.expected +27 -0
  169. data/vendor/spinel/test/bound_method_array.rb +22 -0
  170. data/vendor/spinel/test/bound_method_array.rb.expected +4 -0
  171. data/vendor/spinel/test/bound_method_basic.rb +27 -0
  172. data/vendor/spinel/test/bound_method_basic.rb.expected +2 -0
  173. data/vendor/spinel/test/bound_method_gc.rb +30 -0
  174. data/vendor/spinel/test/bound_method_gc.rb.expected +1 -0
  175. data/vendor/spinel/test/bound_method_obj_recv.rb +41 -0
  176. data/vendor/spinel/test/bound_method_obj_recv.rb.expected +4 -0
  177. data/vendor/spinel/test/bound_method_single_eval.rb +37 -0
  178. data/vendor/spinel/test/bound_method_single_eval.rb.expected +4 -0
  179. data/vendor/spinel/test/box_pointer_to_poly.rb +27 -0
  180. data/vendor/spinel/test/box_pointer_to_poly.rb.expected +1 -0
  181. data/vendor/spinel/test/box_unbox_local_assign_cond.rb +22 -0
  182. data/vendor/spinel/test/box_unbox_local_assign_cond.rb.expected +2 -0
  183. data/vendor/spinel/test/bundle_array_a.rb +400 -0
  184. data/vendor/spinel/test/bundle_array_a.rb.expected +117 -0
  185. data/vendor/spinel/test/bundle_array_b.rb +369 -0
  186. data/vendor/spinel/test/bundle_array_b.rb.expected +136 -0
  187. data/vendor/spinel/test/bundle_array_c.rb +146 -0
  188. data/vendor/spinel/test/bundle_array_c.rb.expected +51 -0
  189. data/vendor/spinel/test/bundle_array_d.rb +181 -0
  190. data/vendor/spinel/test/bundle_array_d.rb.expected +66 -0
  191. data/vendor/spinel/test/bundle_hash.rb +328 -0
  192. data/vendor/spinel/test/bundle_hash.rb.expected +104 -0
  193. data/vendor/spinel/test/bundle_int_array.rb +125 -0
  194. data/vendor/spinel/test/bundle_int_array.rb.expected +24 -0
  195. data/vendor/spinel/test/bundle_integer.rb +248 -0
  196. data/vendor/spinel/test/bundle_integer.rb.expected +113 -0
  197. data/vendor/spinel/test/bundle_io_sys.rb +223 -0
  198. data/vendor/spinel/test/bundle_io_sys.rb.expected +62 -0
  199. data/vendor/spinel/test/bundle_misc_a.rb +462 -0
  200. data/vendor/spinel/test/bundle_misc_a.rb.expected +208 -0
  201. data/vendor/spinel/test/bundle_misc_b.rb +401 -0
  202. data/vendor/spinel/test/bundle_misc_b.rb.expected +120 -0
  203. data/vendor/spinel/test/bundle_poly.rb +145 -0
  204. data/vendor/spinel/test/bundle_poly.rb.expected +66 -0
  205. data/vendor/spinel/test/bundle_string_a.rb +278 -0
  206. data/vendor/spinel/test/bundle_string_a.rb.expected +93 -0
  207. data/vendor/spinel/test/bundle_string_b.rb +226 -0
  208. data/vendor/spinel/test/bundle_string_b.rb.expected +83 -0
  209. data/vendor/spinel/test/bundle_sym.rb +302 -0
  210. data/vendor/spinel/test/bundle_sym.rb.expected +117 -0
  211. data/vendor/spinel/test/call_and_write.rb +28 -0
  212. data/vendor/spinel/test/call_and_write.rb.expected +3 -0
  213. data/vendor/spinel/test/call_arg_int_to_obj_cast.rb +55 -0
  214. data/vendor/spinel/test/call_arg_int_to_obj_cast.rb.expected +1 -0
  215. data/vendor/spinel/test/call_op_write.rb +51 -0
  216. data/vendor/spinel/test/call_op_write.rb.expected +11 -0
  217. data/vendor/spinel/test/call_or_write.rb +35 -0
  218. data/vendor/spinel/test/call_or_write.rb.expected +3 -0
  219. data/vendor/spinel/test/case.rb +43 -0
  220. data/vendor/spinel/test/case.rb.expected +10 -0
  221. data/vendor/spinel/test/case_string_when_sym_no_match.rb +59 -0
  222. data/vendor/spinel/test/case_string_when_sym_no_match.rb.expected +7 -0
  223. data/vendor/spinel/test/case_when_class.rb +70 -0
  224. data/vendor/spinel/test/case_when_class.rb.expected +5 -0
  225. data/vendor/spinel/test/chained_attr_setter.rb +55 -0
  226. data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb +28 -0
  227. data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb.expected +3 -0
  228. data/vendor/spinel/test/chained_ivar_write_call_rhs.rb +30 -0
  229. data/vendor/spinel/test/chained_ivar_write_call_rhs.rb.expected +2 -0
  230. data/vendor/spinel/test/chained_ivar_write_split.rb +26 -0
  231. data/vendor/spinel/test/chained_ivar_write_split.rb.expected +3 -0
  232. data/vendor/spinel/test/chained_ivar_write_subclass.rb +26 -0
  233. data/vendor/spinel/test/chained_ivar_write_subclass.rb.expected +2 -0
  234. data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb +32 -0
  235. data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb.expected +3 -0
  236. data/vendor/spinel/test/chained_or_assign_collection_element.rb +29 -0
  237. data/vendor/spinel/test/chained_or_assign_collection_element.rb.expected +2 -0
  238. data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb +25 -0
  239. data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb.expected +3 -0
  240. data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb +24 -0
  241. data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb.expected +3 -0
  242. data/vendor/spinel/test/class_constant_path_read.rb +26 -0
  243. data/vendor/spinel/test/class_constant_path_read.rb.expected +4 -0
  244. data/vendor/spinel/test/class_constant_sym_array.rb +19 -0
  245. data/vendor/spinel/test/class_constant_sym_array.rb.expected +4 -0
  246. data/vendor/spinel/test/class_def_order.rb +66 -0
  247. data/vendor/spinel/test/class_def_order.rb.expected +4 -0
  248. data/vendor/spinel/test/class_method_open_class_call.rb +31 -0
  249. data/vendor/spinel/test/class_method_open_class_call.rb.expected +3 -0
  250. data/vendor/spinel/test/class_var_read.rb +113 -0
  251. data/vendor/spinel/test/class_var_read.rb.expected +8 -0
  252. data/vendor/spinel/test/class_var_write.rb +19 -0
  253. data/vendor/spinel/test/class_var_write.rb.expected +1 -0
  254. data/vendor/spinel/test/cls_ivar_type_parent_defer.rb +32 -0
  255. data/vendor/spinel/test/cls_method_object.rb +31 -0
  256. data/vendor/spinel/test/cls_method_object.rb.expected +2 -0
  257. data/vendor/spinel/test/codegen_class_in_module_with_explicit_parent.rb +15 -0
  258. data/vendor/spinel/test/codegen_class_in_module_with_explicit_parent.rb.expected +1 -0
  259. data/vendor/spinel/test/codegen_const_lookup_in_toplevel_method.rb +13 -0
  260. data/vendor/spinel/test/codegen_const_lookup_in_toplevel_method.rb.expected +1 -0
  261. data/vendor/spinel/test/comparable.rb +21 -0
  262. data/vendor/spinel/test/comparable.rb.expected +5 -0
  263. data/vendor/spinel/test/const_init_block_param_scan.rb +13 -0
  264. data/vendor/spinel/test/const_init_block_param_scan.rb.expected +2 -0
  265. data/vendor/spinel/test/constant_path.rb +102 -0
  266. data/vendor/spinel/test/constant_path.rb.expected +21 -0
  267. data/vendor/spinel/test/constants.rb +44 -0
  268. data/vendor/spinel/test/constants.rb.expected +13 -0
  269. data/vendor/spinel/test/control.rb +23 -0
  270. data/vendor/spinel/test/control.rb.expected +7 -0
  271. data/vendor/spinel/test/default_args.rb +108 -0
  272. data/vendor/spinel/test/default_args.rb.expected +13 -0
  273. data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb +32 -0
  274. data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb.expected +1 -0
  275. data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb +43 -0
  276. data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb.expected +2 -0
  277. data/vendor/spinel/test/each_with_object_seed_shadow.rb +14 -0
  278. data/vendor/spinel/test/each_with_object_seed_shadow.rb.expected +4 -0
  279. data/vendor/spinel/test/elsif_isa_chain.rb +56 -0
  280. data/vendor/spinel/test/elsif_isa_chain.rb.expected +6 -0
  281. data/vendor/spinel/test/embedded_var.rb +17 -0
  282. data/vendor/spinel/test/embedded_var.rb.expected +2 -0
  283. data/vendor/spinel/test/empty_array_param.rb +94 -0
  284. data/vendor/spinel/test/empty_array_param.rb.expected +18 -0
  285. data/vendor/spinel/test/empty_hash_ivar_string_value.rb +51 -0
  286. data/vendor/spinel/test/empty_hash_ivar_string_value.rb.expected +4 -0
  287. data/vendor/spinel/test/endless_method.rb +61 -0
  288. data/vendor/spinel/test/endless_method.rb.expected +11 -0
  289. data/vendor/spinel/test/endless_method_rescue.rb +33 -0
  290. data/vendor/spinel/test/endless_method_rescue.rb.expected +10 -0
  291. data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb +19 -0
  292. data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb.expected +1 -0
  293. data/vendor/spinel/test/ensure_runs_on_raise.rb +32 -0
  294. data/vendor/spinel/test/ensure_runs_on_raise.rb.expected +3 -0
  295. data/vendor/spinel/test/ensure_runs_on_raise_nested.rb +38 -0
  296. data/vendor/spinel/test/ensure_runs_on_raise_nested.rb.expected +4 -0
  297. data/vendor/spinel/test/ensure_runs_on_return.rb +61 -0
  298. data/vendor/spinel/test/ensure_runs_on_return.rb.expected +6 -0
  299. data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb +26 -0
  300. data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb.expected +2 -0
  301. data/vendor/spinel/test/ensure_runs_on_return_nested.rb +37 -0
  302. data/vendor/spinel/test/ensure_runs_on_return_nested.rb.expected +3 -0
  303. data/vendor/spinel/test/enumerable.rb +19 -0
  304. data/vendor/spinel/test/enumerable.rb.expected +2 -0
  305. data/vendor/spinel/test/env_string_inference.rb +37 -0
  306. data/vendor/spinel/test/env_string_inference.rb.expected +6 -0
  307. data/vendor/spinel/test/exception_object_methods.rb +99 -0
  308. data/vendor/spinel/test/exception_object_methods.rb.expected +15 -0
  309. data/vendor/spinel/test/exceptions.rb +34 -0
  310. data/vendor/spinel/test/exceptions.rb.expected +4 -0
  311. data/vendor/spinel/test/features.rb +32 -0
  312. data/vendor/spinel/test/features.rb.expected +9 -0
  313. data/vendor/spinel/test/ffi_buffer_reader.rb +23 -0
  314. data/vendor/spinel/test/ffi_buffer_reader.rb.expected +5 -0
  315. data/vendor/spinel/test/ffi_const.rb +12 -0
  316. data/vendor/spinel/test/ffi_const.rb.expected +5 -0
  317. data/vendor/spinel/test/ffi_libc_libm_basic.rb +16 -0
  318. data/vendor/spinel/test/ffi_libc_libm_basic.rb.expected +5 -0
  319. data/vendor/spinel/test/ffi_ptr_nil.rb +27 -0
  320. data/vendor/spinel/test/ffi_ptr_nil.rb.expected +2 -0
  321. data/vendor/spinel/test/ffi_void_return.rb +14 -0
  322. data/vendor/spinel/test/ffi_void_return.rb.expected +2 -0
  323. data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb +22 -0
  324. data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb.expected +3 -0
  325. data/vendor/spinel/test/fiber_yield_across_method_call.rb +28 -0
  326. data/vendor/spinel/test/fiber_yield_across_method_call.rb.expected +3 -0
  327. data/vendor/spinel/test/file_basename_gc.rb +59 -0
  328. data/vendor/spinel/test/file_basename_gc.rb.expected +2 -0
  329. data/vendor/spinel/test/forward_call_class_method_inherited_init.rb +36 -0
  330. data/vendor/spinel/test/forward_call_class_method_inherited_init.rb.expected +1 -0
  331. data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb +32 -0
  332. data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb.expected +1 -0
  333. data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb +41 -0
  334. data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb.expected +1 -0
  335. data/vendor/spinel/test/forward_call_class_method_int_array.rb +26 -0
  336. data/vendor/spinel/test/forward_call_class_method_int_array.rb.expected +1 -0
  337. data/vendor/spinel/test/forward_call_class_method_nested.rb +35 -0
  338. data/vendor/spinel/test/forward_call_class_method_nested.rb.expected +1 -0
  339. data/vendor/spinel/test/forward_call_class_method_obj.rb +36 -0
  340. data/vendor/spinel/test/forward_call_class_method_obj.rb.expected +1 -0
  341. data/vendor/spinel/test/forward_call_param_type_inference.rb +23 -0
  342. data/vendor/spinel/test/forward_call_param_type_inference.rb.expected +1 -0
  343. data/vendor/spinel/test/forward_call_param_type_int_array.rb +34 -0
  344. data/vendor/spinel/test/forward_call_param_type_int_array.rb.expected +1 -0
  345. data/vendor/spinel/test/forward_call_param_type_obj.rb +38 -0
  346. data/vendor/spinel/test/forward_call_param_type_obj.rb.expected +1 -0
  347. data/vendor/spinel/test/gc_root_ptr_array_literal.rb +63 -0
  348. data/vendor/spinel/test/gc_root_ptr_array_literal.rb.expected +1 -0
  349. data/vendor/spinel/test/gc_save_double_in_new.rb +13 -0
  350. data/vendor/spinel/test/gc_save_double_in_new.rb.expected +1 -0
  351. data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb +54 -0
  352. data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb.expected +2 -0
  353. data/vendor/spinel/test/global_var.rb +53 -0
  354. data/vendor/spinel/test/global_var.rb.expected +12 -0
  355. data/vendor/spinel/test/gvar.rb +22 -0
  356. data/vendor/spinel/test/gvar.rb.expected +4 -0
  357. data/vendor/spinel/test/hash_dig.rb +92 -0
  358. data/vendor/spinel/test/hash_dig.rb.expected +37 -0
  359. data/vendor/spinel/test/hash_keys_each_shadow.rb +40 -0
  360. data/vendor/spinel/test/hash_keys_each_shadow.rb.expected +9 -0
  361. data/vendor/spinel/test/hash_shorthand.rb +37 -0
  362. data/vendor/spinel/test/hash_shorthand.rb.expected +6 -0
  363. data/vendor/spinel/test/hash_shorthand_str.rb +48 -0
  364. data/vendor/spinel/test/hash_shorthand_str.rb.expected +19 -0
  365. data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb +46 -0
  366. data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb.expected +2 -0
  367. data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb +50 -0
  368. data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb.expected +3 -0
  369. data/vendor/spinel/test/implicit_self_param_poly.rb +17 -0
  370. data/vendor/spinel/test/implicit_self_param_poly.rb.expected +1 -0
  371. data/vendor/spinel/test/index_write.rb +106 -0
  372. data/vendor/spinel/test/index_write.rb.expected +30 -0
  373. data/vendor/spinel/test/inference_method_set.rb +35 -0
  374. data/vendor/spinel/test/inference_method_set.rb.expected +2 -0
  375. data/vendor/spinel/test/inherit.rb +52 -0
  376. data/vendor/spinel/test/inherit.rb.expected +7 -0
  377. data/vendor/spinel/test/inherited_method_param_widen.rb +49 -0
  378. data/vendor/spinel/test/inherited_method_param_widen.rb.expected +1 -0
  379. data/vendor/spinel/test/init_locals.rb +43 -0
  380. data/vendor/spinel/test/init_locals.rb.expected +3 -0
  381. data/vendor/spinel/test/initialize_param_poly_call_sites.rb +20 -0
  382. data/vendor/spinel/test/initialize_param_poly_call_sites.rb.expected +2 -0
  383. data/vendor/spinel/test/initialize_param_through_call.rb +15 -0
  384. data/vendor/spinel/test/initialize_param_through_call.rb.expected +1 -0
  385. data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb +40 -0
  386. data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb.expected +1 -0
  387. data/vendor/spinel/test/inspect.rb +86 -0
  388. data/vendor/spinel/test/inspect.rb.expected +52 -0
  389. data/vendor/spinel/test/instance_eval_trampoline.rb +88 -0
  390. data/vendor/spinel/test/instance_eval_trampoline.rb.expected +5 -0
  391. data/vendor/spinel/test/int_bracket_skip_sym_idx.rb +40 -0
  392. data/vendor/spinel/test/int_bracket_skip_sym_idx.rb.expected +5 -0
  393. data/vendor/spinel/test/int_keyed_hash_lookup_as_array.rb +19 -0
  394. data/vendor/spinel/test/int_keyed_hash_lookup_as_array.rb.expected +2 -0
  395. data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb +25 -0
  396. data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb.expected +1 -0
  397. data/vendor/spinel/test/integer_div.rb +21 -0
  398. data/vendor/spinel/test/integer_div.rb.expected +10 -0
  399. data/vendor/spinel/test/integer_div_by_zero.rb +80 -0
  400. data/vendor/spinel/test/integer_div_by_zero.rb.expected +10 -0
  401. data/vendor/spinel/test/interp_method_widening.rb +39 -0
  402. data/vendor/spinel/test/interp_method_widening.rb.expected +4 -0
  403. data/vendor/spinel/test/interp_symbol.rb +18 -0
  404. data/vendor/spinel/test/interp_symbol.rb.expected +3 -0
  405. data/vendor/spinel/test/introspect.rb +35 -0
  406. data/vendor/spinel/test/introspect.rb.expected +11 -0
  407. data/vendor/spinel/test/issue176_empty_hash_default.rb +34 -0
  408. data/vendor/spinel/test/issue176_empty_hash_default.rb.expected +3 -0
  409. data/vendor/spinel/test/issue203_string_new.rb +27 -0
  410. data/vendor/spinel/test/issue203_string_new.rb.expected +4 -0
  411. data/vendor/spinel/test/issue204_user_find_fetch.rb +25 -0
  412. data/vendor/spinel/test/issue204_user_find_fetch.rb.expected +5 -0
  413. data/vendor/spinel/test/issue207_factory_pattern.rb +35 -0
  414. data/vendor/spinel/test/issue207_factory_pattern.rb.expected +1 -0
  415. data/vendor/spinel/test/issue207_full_repro.rb +52 -0
  416. data/vendor/spinel/test/issue207_full_repro.rb.expected +1 -0
  417. data/vendor/spinel/test/issue208_inherited_class_method.rb +24 -0
  418. data/vendor/spinel/test/issue208_inherited_class_method.rb.expected +4 -0
  419. data/vendor/spinel/test/issue219_aref_chain.rb +36 -0
  420. data/vendor/spinel/test/issue219_aref_chain.rb.expected +5 -0
  421. data/vendor/spinel/test/issue224_bare_new_inherited.rb +66 -0
  422. data/vendor/spinel/test/issue224_bare_new_inherited.rb.expected +4 -0
  423. data/vendor/spinel/test/issue229_uncalled_cls_method.rb +76 -0
  424. data/vendor/spinel/test/issue229_uncalled_cls_method.rb.expected +3 -0
  425. data/vendor/spinel/test/issue235_chain_tail_widening.rb +48 -0
  426. data/vendor/spinel/test/issue235_chain_tail_widening.rb.expected +5 -0
  427. data/vendor/spinel/test/issue236_chain_empty_literal.rb +84 -0
  428. data/vendor/spinel/test/issue236_chain_empty_literal.rb.expected +7 -0
  429. data/vendor/spinel/test/issue239_cls_method_default_args.rb +41 -0
  430. data/vendor/spinel/test/issue239_cls_method_default_args.rb.expected +5 -0
  431. data/vendor/spinel/test/issue_266_def_length_inference.rb +63 -0
  432. data/vendor/spinel/test/issue_266_def_length_inference.rb.expected +1 -0
  433. data/vendor/spinel/test/ivar_and_write_basic.rb +34 -0
  434. data/vendor/spinel/test/ivar_and_write_basic.rb.expected +5 -0
  435. data/vendor/spinel/test/ivar_c_keyword.rb +14 -0
  436. data/vendor/spinel/test/ivar_c_keyword.rb.expected +1 -0
  437. data/vendor/spinel/test/ivar_float_array.rb +59 -0
  438. data/vendor/spinel/test/ivar_float_array.rb.expected +11 -0
  439. data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb +22 -0
  440. data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb.expected +6 -0
  441. data/vendor/spinel/test/ivar_or_write_basic.rb +57 -0
  442. data/vendor/spinel/test/ivar_or_write_basic.rb.expected +9 -0
  443. data/vendor/spinel/test/ivar_polymorphic.rb +87 -0
  444. data/vendor/spinel/test/ivar_polymorphic.rb.expected +12 -0
  445. data/vendor/spinel/test/ivar_ternary_mixed.rb +108 -0
  446. data/vendor/spinel/test/ivar_ternary_mixed.rb.expected +15 -0
  447. data/vendor/spinel/test/ivar_writer_heterogeneity.rb +34 -0
  448. data/vendor/spinel/test/ivar_writer_heterogeneity.rb.expected +2 -0
  449. data/vendor/spinel/test/known_constants.rb +25 -0
  450. data/vendor/spinel/test/known_constants.rb.expected +4 -0
  451. data/vendor/spinel/test/kw_nil_default_string_call.rb +6 -0
  452. data/vendor/spinel/test/kw_nil_default_string_call.rb.expected +2 -0
  453. data/vendor/spinel/test/kwargs.rb +21 -0
  454. data/vendor/spinel/test/kwargs.rb.expected +6 -0
  455. data/vendor/spinel/test/kwargs_param.rb +26 -0
  456. data/vendor/spinel/test/kwargs_param.rb.expected +2 -0
  457. data/vendor/spinel/test/kwargs_param_widen.rb +73 -0
  458. data/vendor/spinel/test/kwargs_param_widen.rb.expected +3 -0
  459. data/vendor/spinel/test/lrama_features.rb +142 -0
  460. data/vendor/spinel/test/lrama_features.rb.expected +38 -0
  461. data/vendor/spinel/test/map_array_block_result.rb +29 -0
  462. data/vendor/spinel/test/map_array_block_result.rb.expected +2 -0
  463. data/vendor/spinel/test/map_block_returns_nested_array.rb +53 -0
  464. data/vendor/spinel/test/map_empty_block.rb +26 -0
  465. data/vendor/spinel/test/map_empty_block.rb.expected +6 -0
  466. data/vendor/spinel/test/map_range_recv_array_block.rb +31 -0
  467. data/vendor/spinel/test/mega.rb +35 -0
  468. data/vendor/spinel/test/mega.rb.expected +7 -0
  469. data/vendor/spinel/test/method.rb +21 -0
  470. data/vendor/spinel/test/method.rb.expected +6 -0
  471. data/vendor/spinel/test/method_defined.rb +36 -0
  472. data/vendor/spinel/test/method_defined.rb.expected +17 -0
  473. data/vendor/spinel/test/method_dispatch_poly_array.rb +35 -0
  474. data/vendor/spinel/test/method_dispatch_poly_array.rb.expected +2 -0
  475. data/vendor/spinel/test/method_introspection.rb +24 -0
  476. data/vendor/spinel/test/method_introspection.rb.expected +6 -0
  477. data/vendor/spinel/test/method_param_unify_to_poly.rb +40 -0
  478. data/vendor/spinel/test/method_param_unify_to_poly.rb.expected +2 -0
  479. data/vendor/spinel/test/misc.rb +49 -0
  480. data/vendor/spinel/test/misc.rb.expected +7 -0
  481. data/vendor/spinel/test/mixin.rb +54 -0
  482. data/vendor/spinel/test/mixin.rb.expected +4 -0
  483. data/vendor/spinel/test/module_acc_dispatch_param_box.rb +46 -0
  484. data/vendor/spinel/test/module_acc_dispatch_param_box.rb.expected +2 -0
  485. data/vendor/spinel/test/module_class_new.rb +17 -0
  486. data/vendor/spinel/test/module_class_new.rb.expected +3 -0
  487. data/vendor/spinel/test/module_cls_method_string_return.rb +53 -0
  488. data/vendor/spinel/test/module_cls_method_string_return.rb.expected +5 -0
  489. data/vendor/spinel/test/module_const_array_widen.rb +36 -0
  490. data/vendor/spinel/test/module_const_array_widen.rb.expected +1 -0
  491. data/vendor/spinel/test/module_dispatch_param_widen.rb +55 -0
  492. data/vendor/spinel/test/module_dispatch_param_widen.rb.expected +1 -0
  493. data/vendor/spinel/test/module_function_namespace.rb +58 -0
  494. data/vendor/spinel/test/module_ivar_hash.rb +61 -0
  495. data/vendor/spinel/test/module_ivar_hash.rb.expected +7 -0
  496. data/vendor/spinel/test/module_relative_constant_path.rb +26 -0
  497. data/vendor/spinel/test/module_relative_constant_path.rb.expected +2 -0
  498. data/vendor/spinel/test/module_singleton_accessor.rb +65 -0
  499. data/vendor/spinel/test/module_singleton_accessor.rb.expected +3 -0
  500. data/vendor/spinel/test/module_singleton_accessor_poly.rb +62 -0
  501. data/vendor/spinel/test/module_singleton_accessor_poly.rb.expected +7 -0
  502. data/vendor/spinel/test/multi_arg_block_call.rb +56 -0
  503. data/vendor/spinel/test/multi_arg_block_call.rb.expected +5 -0
  504. data/vendor/spinel/test/multi_arg_yield.rb +70 -0
  505. data/vendor/spinel/test/multi_arg_yield.rb.expected +6 -0
  506. data/vendor/spinel/test/multi_assign_ivar.rb +33 -0
  507. data/vendor/spinel/test/multi_assign_ivar.rb.expected +1 -0
  508. data/vendor/spinel/test/multi_return.rb +35 -0
  509. data/vendor/spinel/test/multi_return.rb.expected +10 -0
  510. data/vendor/spinel/test/multi_return_bare.rb +77 -0
  511. data/vendor/spinel/test/multi_return_bare.rb.expected +16 -0
  512. data/vendor/spinel/test/multi_write_const.rb +36 -0
  513. data/vendor/spinel/test/multi_write_const.rb.expected +9 -0
  514. data/vendor/spinel/test/multi_write_from_poly_recv.rb +34 -0
  515. data/vendor/spinel/test/multi_write_from_poly_recv.rb.expected +1 -0
  516. data/vendor/spinel/test/multi_write_ivar.rb +34 -0
  517. data/vendor/spinel/test/multi_write_ivar.rb.expected +3 -0
  518. data/vendor/spinel/test/multi_write_ivar_const_from_array_rhs.rb +53 -0
  519. data/vendor/spinel/test/multi_write_ivar_const_from_array_rhs.rb.expected +6 -0
  520. data/vendor/spinel/test/multi_write_ivar_widening.rb +10 -0
  521. data/vendor/spinel/test/multi_write_ivar_widening.rb.expected +2 -0
  522. data/vendor/spinel/test/multi_write_map_block.rb +31 -0
  523. data/vendor/spinel/test/multi_write_map_block.rb.expected +7 -0
  524. data/vendor/spinel/test/multi_write_setter.rb +28 -0
  525. data/vendor/spinel/test/multi_write_setter.rb.expected +3 -0
  526. data/vendor/spinel/test/multi_write_typed_array_dispatch.rb +44 -0
  527. data/vendor/spinel/test/multi_write_typed_array_dispatch.rb.expected +3 -0
  528. data/vendor/spinel/test/nested_class_in_class.rb +38 -0
  529. data/vendor/spinel/test/nested_class_in_class.rb.expected +3 -0
  530. data/vendor/spinel/test/nested_class_module_const_resolution.rb +38 -0
  531. data/vendor/spinel/test/nested_class_module_const_resolution.rb.expected +2 -0
  532. data/vendor/spinel/test/nil_ivar.rb +44 -0
  533. data/vendor/spinel/test/nil_ivar.rb.expected +5 -0
  534. data/vendor/spinel/test/no_attr_write_shortcut_complex.rb +33 -0
  535. data/vendor/spinel/test/no_attr_write_shortcut_complex.rb.expected +3 -0
  536. data/vendor/spinel/test/no_attr_write_shortcut_multi.rb +38 -0
  537. data/vendor/spinel/test/no_attr_write_shortcut_multi.rb.expected +4 -0
  538. data/vendor/spinel/test/no_keywords_param.rb +15 -0
  539. data/vendor/spinel/test/no_keywords_param.rb.expected +2 -0
  540. data/vendor/spinel/test/nullable.rb +26 -0
  541. data/vendor/spinel/test/nullable.rb.expected +2 -0
  542. data/vendor/spinel/test/obj_array.rb +26 -0
  543. data/vendor/spinel/test/obj_array.rb.expected +6 -0
  544. data/vendor/spinel/test/object_new_sentinel.rb +18 -0
  545. data/vendor/spinel/test/object_new_sentinel.rb.expected +3 -0
  546. data/vendor/spinel/test/object_truthy.rb +31 -0
  547. data/vendor/spinel/test/object_truthy.rb.expected +5 -0
  548. data/vendor/spinel/test/op_assign_user_operator.rb +36 -0
  549. data/vendor/spinel/test/open_class.rb +27 -0
  550. data/vendor/spinel/test/open_class.rb.expected +4 -0
  551. data/vendor/spinel/test/optional_string_param_method.rb +11 -0
  552. data/vendor/spinel/test/optional_string_param_method.rb.expected +3 -0
  553. data/vendor/spinel/test/param_inference_if_predicate.rb +90 -0
  554. data/vendor/spinel/test/param_inference_if_predicate.rb.expected +3 -0
  555. data/vendor/spinel/test/param_narrow_from_body_call.rb +34 -0
  556. data/vendor/spinel/test/param_narrow_from_body_call.rb.expected +2 -0
  557. data/vendor/spinel/test/param_widens_when_body_assigns_string.rb +21 -0
  558. data/vendor/spinel/test/param_widens_when_body_assigns_string.rb.expected +6 -0
  559. data/vendor/spinel/test/pattern.rb +41 -0
  560. data/vendor/spinel/test/pattern.rb.expected +9 -0
  561. data/vendor/spinel/test/poly.rb +24 -0
  562. data/vendor/spinel/test/poly.rb.expected +9 -0
  563. data/vendor/spinel/test/poly2.rb +34 -0
  564. data/vendor/spinel/test/poly2.rb.expected +9 -0
  565. data/vendor/spinel/test/poly_arith.rb +34 -0
  566. data/vendor/spinel/test/poly_arith.rb.expected +10 -0
  567. data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb +37 -0
  568. data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb.expected +9 -0
  569. data/vendor/spinel/test/poly_array_slot_literal.rb +41 -0
  570. data/vendor/spinel/test/poly_array_slot_sized_default.rb +33 -0
  571. data/vendor/spinel/test/poly_box_int_array.rb +13 -0
  572. data/vendor/spinel/test/poly_box_int_array.rb.expected +2 -0
  573. data/vendor/spinel/test/poly_dispatch_args_ret.rb +45 -0
  574. data/vendor/spinel/test/poly_dispatch_args_ret.rb.expected +4 -0
  575. data/vendor/spinel/test/poly_dispatch_arity_padding.rb +36 -0
  576. data/vendor/spinel/test/poly_dispatch_arity_truncate.rb +45 -0
  577. data/vendor/spinel/test/poly_dispatch_attr_reader.rb +44 -0
  578. data/vendor/spinel/test/poly_dispatch_attr_reader.rb.expected +4 -0
  579. data/vendor/spinel/test/poly_dispatch_builtin.rb +16 -0
  580. data/vendor/spinel/test/poly_dispatch_builtin.rb.expected +2 -0
  581. data/vendor/spinel/test/poly_dispatch_builtin_all.rb +34 -0
  582. data/vendor/spinel/test/poly_dispatch_builtin_all.rb.expected +8 -0
  583. data/vendor/spinel/test/poly_dispatch_ptr_array.rb +57 -0
  584. data/vendor/spinel/test/poly_dispatch_ptr_array.rb.expected +6 -0
  585. data/vendor/spinel/test/poly_equality_mixed_sites.rb +40 -0
  586. data/vendor/spinel/test/poly_equality_mixed_sites.rb.expected +10 -0
  587. data/vendor/spinel/test/poly_gc.rb +39 -0
  588. data/vendor/spinel/test/poly_gc.rb.expected +3 -0
  589. data/vendor/spinel/test/poly_hash_literal_from_ivar.rb +47 -0
  590. data/vendor/spinel/test/poly_hash_literal_from_ivar.rb.expected +5 -0
  591. data/vendor/spinel/test/poly_hash_with_range.rb +36 -0
  592. data/vendor/spinel/test/poly_hash_with_range.rb.expected +10 -0
  593. data/vendor/spinel/test/poly_hash_with_time.rb +32 -0
  594. data/vendor/spinel/test/poly_hash_with_time.rb.expected +8 -0
  595. data/vendor/spinel/test/poly_int_arith_auto_unify.rb +26 -0
  596. data/vendor/spinel/test/poly_int_arith_auto_unify.rb.expected +4 -0
  597. data/vendor/spinel/test/poly_int_bit_index.rb +50 -0
  598. data/vendor/spinel/test/poly_int_bit_index.rb.expected +14 -0
  599. data/vendor/spinel/test/poly_int_bitops_auto_unify.rb +20 -0
  600. data/vendor/spinel/test/poly_int_bitops_auto_unify.rb.expected +5 -0
  601. data/vendor/spinel/test/poly_is_a.rb +47 -0
  602. data/vendor/spinel/test/poly_is_a.rb.expected +10 -0
  603. data/vendor/spinel/test/poly_keyed_hash_method_dedup.rb +37 -0
  604. data/vendor/spinel/test/poly_keyed_hash_method_dedup.rb.expected +4 -0
  605. data/vendor/spinel/test/poly_keyed_hash_pipeline.rb +40 -0
  606. data/vendor/spinel/test/poly_keyed_hash_pipeline.rb.expected +2 -0
  607. data/vendor/spinel/test/poly_method_args.rb +23 -0
  608. data/vendor/spinel/test/poly_method_args.rb.expected +2 -0
  609. data/vendor/spinel/test/poly_method_mixed_return.rb +23 -0
  610. data/vendor/spinel/test/poly_method_mixed_return.rb.expected +2 -0
  611. data/vendor/spinel/test/poly_or_returns_value.rb +13 -0
  612. data/vendor/spinel/test/poly_or_returns_value.rb.expected +4 -0
  613. data/vendor/spinel/test/poly_recv_aref_box_arm.rb +41 -0
  614. data/vendor/spinel/test/poly_recv_aref_box_arm.rb.expected +4 -0
  615. data/vendor/spinel/test/poly_recv_aref_str_key.rb +42 -0
  616. data/vendor/spinel/test/poly_recv_aref_str_key.rb.expected +2 -0
  617. data/vendor/spinel/test/poly_recv_bracket_assign.rb +31 -0
  618. data/vendor/spinel/test/poly_recv_bracket_assign.rb.expected +1 -0
  619. data/vendor/spinel/test/poly_recv_each.rb +35 -0
  620. data/vendor/spinel/test/poly_recv_each.rb.expected +7 -0
  621. data/vendor/spinel/test/poly_return_value_class.rb +66 -0
  622. data/vendor/spinel/test/poly_return_value_class.rb.expected +7 -0
  623. data/vendor/spinel/test/poly_self_deref.rb +28 -0
  624. data/vendor/spinel/test/poly_self_deref.rb.expected +2 -0
  625. data/vendor/spinel/test/poly_shl_array_push_dispatch.rb +35 -0
  626. data/vendor/spinel/test/poly_shl_array_push_dispatch.rb.expected +5 -0
  627. data/vendor/spinel/test/poly_slice_assign.rb +26 -0
  628. data/vendor/spinel/test/poly_slice_assign.rb.expected +3 -0
  629. data/vendor/spinel/test/poly_str_append.rb +40 -0
  630. data/vendor/spinel/test/poly_str_append.rb.expected +2 -0
  631. data/vendor/spinel/test/poly_to_i_via_str_poly_hash.rb +19 -0
  632. data/vendor/spinel/test/poly_to_i_via_str_poly_hash.rb.expected +1 -0
  633. data/vendor/spinel/test/post_execution.rb +17 -0
  634. data/vendor/spinel/test/post_execution.rb.expected +4 -0
  635. data/vendor/spinel/test/pre_execution.rb +18 -0
  636. data/vendor/spinel/test/pre_execution.rb.expected +4 -0
  637. data/vendor/spinel/test/primitive_method_shadow.rb +48 -0
  638. data/vendor/spinel/test/primitive_method_shadow.rb.expected +4 -0
  639. data/vendor/spinel/test/primitive_method_shadow_int_recv.rb +47 -0
  640. data/vendor/spinel/test/primitive_method_shadow_int_recv.rb.expected +1 -0
  641. data/vendor/spinel/test/proc.rb +42 -0
  642. data/vendor/spinel/test/proc.rb.expected +8 -0
  643. data/vendor/spinel/test/proc_closure.rb +44 -0
  644. data/vendor/spinel/test/proc_closure.rb.expected +8 -0
  645. data/vendor/spinel/test/proc_hash_value.rb +27 -0
  646. data/vendor/spinel/test/proc_hash_value.rb.expected +1 -0
  647. data/vendor/spinel/test/ptr_array.rb +107 -0
  648. data/vendor/spinel/test/ptr_array.rb.expected +23 -0
  649. data/vendor/spinel/test/range.rb +130 -0
  650. data/vendor/spinel/test/range.rb.expected +61 -0
  651. data/vendor/spinel/test/redo.rb +263 -0
  652. data/vendor/spinel/test/redo.rb.expected +71 -0
  653. data/vendor/spinel/test/reduce_acc_shadow.rb +31 -0
  654. data/vendor/spinel/test/reduce_acc_shadow.rb.expected +5 -0
  655. data/vendor/spinel/test/regex.rb +152 -0
  656. data/vendor/spinel/test/regex.rb.expected +43 -0
  657. data/vendor/spinel/test/regexp.rb +34 -0
  658. data/vendor/spinel/test/regexp.rb.expected +12 -0
  659. data/vendor/spinel/test/reopen_class.rb +33 -0
  660. data/vendor/spinel/test/reopen_class.rb.expected +5 -0
  661. data/vendor/spinel/test/require/lib/greeter.rb +9 -0
  662. data/vendor/spinel/test/require/main.rb +5 -0
  663. data/vendor/spinel/test/require_dedup/lib/data.rb +2 -0
  664. data/vendor/spinel/test/require_dedup/lib/types.rb +1 -0
  665. data/vendor/spinel/test/require_dedup/main.rb +8 -0
  666. data/vendor/spinel/test/rescue.rb +48 -0
  667. data/vendor/spinel/test/rescue.rb.expected +7 -0
  668. data/vendor/spinel/test/rescue_modifier_assign.rb +24 -0
  669. data/vendor/spinel/test/rescue_modifier_assign.rb.expected +4 -0
  670. data/vendor/spinel/test/rightward_assign.rb +36 -0
  671. data/vendor/spinel/test/rightward_assign.rb.expected +6 -0
  672. data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb +27 -0
  673. data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb.expected +3 -0
  674. data/vendor/spinel/test/sample_user_method.rb +20 -0
  675. data/vendor/spinel/test/scan_ivars_inherited_slot.rb +32 -0
  676. data/vendor/spinel/test/scan_new_calls_class_scope.rb +35 -0
  677. data/vendor/spinel/test/scan_new_calls_class_scope.rb.expected +1 -0
  678. data/vendor/spinel/test/send.rb +15 -0
  679. data/vendor/spinel/test/send.rb.expected +2 -0
  680. data/vendor/spinel/test/shareable_constant.rb +10 -0
  681. data/vendor/spinel/test/shareable_constant.rb.expected +2 -0
  682. data/vendor/spinel/test/sized_poly_array_nil_n.rb +37 -0
  683. data/vendor/spinel/test/sized_poly_array_nil_n.rb.expected +3 -0
  684. data/vendor/spinel/test/source_file.rb +37 -0
  685. data/vendor/spinel/test/source_file.rb.expected +8 -0
  686. data/vendor/spinel/test/splat_call.rb +72 -0
  687. data/vendor/spinel/test/splat_call.rb.expected +35 -0
  688. data/vendor/spinel/test/splat_destructure.rb +56 -0
  689. data/vendor/spinel/test/splat_destructure.rb.expected +36 -0
  690. data/vendor/spinel/test/splat_destructure_poly.rb +26 -0
  691. data/vendor/spinel/test/splat_destructure_poly.rb.expected +8 -0
  692. data/vendor/spinel/test/stdlib.rb +28 -0
  693. data/vendor/spinel/test/stdlib.rb.expected +5 -0
  694. data/vendor/spinel/test/stringio.rb +84 -0
  695. data/vendor/spinel/test/stringio.rb.expected +27 -0
  696. data/vendor/spinel/test/strip_nullable_int_cast.rb +24 -0
  697. data/vendor/spinel/test/strip_nullable_int_cast.rb.expected +1 -0
  698. data/vendor/spinel/test/struct.rb +25 -0
  699. data/vendor/spinel/test/struct.rb.expected +8 -0
  700. data/vendor/spinel/test/struct_inherit.rb +28 -0
  701. data/vendor/spinel/test/struct_inherit.rb.expected +7 -0
  702. data/vendor/spinel/test/struct_kw.rb +16 -0
  703. data/vendor/spinel/test/struct_kw.rb.expected +5 -0
  704. data/vendor/spinel/test/subclass_inherits_module_parent.rb +40 -0
  705. data/vendor/spinel/test/subclass_inherits_module_parent.rb.expected +3 -0
  706. data/vendor/spinel/test/super_arg_cross_class_cast.rb +39 -0
  707. data/vendor/spinel/test/super_arg_cross_class_cast.rb.expected +2 -0
  708. data/vendor/spinel/test/super_forwarding.rb +25 -0
  709. data/vendor/spinel/test/super_forwarding.rb.expected +3 -0
  710. data/vendor/spinel/test/sym_case.rb +15 -0
  711. data/vendor/spinel/test/sym_case.rb.expected +4 -0
  712. data/vendor/spinel/test/sym_poly_hash_merge.rb +47 -0
  713. data/vendor/spinel/test/sym_poly_hash_merge.rb.expected +11 -0
  714. data/vendor/spinel/test/symbol_ivar_reassign.rb +25 -0
  715. data/vendor/spinel/test/symbol_ivar_reassign.rb.expected +2 -0
  716. data/vendor/spinel/test/three_level_array_outer_index.rb +87 -0
  717. data/vendor/spinel/test/three_level_array_outer_index.rb.expected +17 -0
  718. data/vendor/spinel/test/toplevel_ivar_array.rb +19 -0
  719. data/vendor/spinel/test/toplevel_ivar_array.rb.expected +4 -0
  720. data/vendor/spinel/test/truncate_module_method.rb +46 -0
  721. data/vendor/spinel/test/truncate_module_method.rb.expected +6 -0
  722. data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb +20 -0
  723. data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb.expected +1 -0
  724. data/vendor/spinel/test/undef.rb +33 -0
  725. data/vendor/spinel/test/undef.rb.expected +2 -0
  726. data/vendor/spinel/test/user_method_named_like_mutator.rb +30 -0
  727. data/vendor/spinel/test/user_method_named_like_mutator.rb.expected +2 -0
  728. data/vendor/spinel/test/value_type_ctor_gc_save.rb +46 -0
  729. data/vendor/spinel/test/value_type_ctor_gc_save.rb.expected +3 -0
  730. data/vendor/spinel/test/widen_int_obj_to_poly.rb +29 -0
  731. data/vendor/spinel/test/yield.rb +67 -0
  732. data/vendor/spinel/test/yield.rb.expected +5 -0
  733. data/vendor/spinel/test/yield_method_call_in_method_body.rb +58 -0
  734. data/vendor/spinel/test/yield_method_call_in_method_body.rb.expected +4 -0
  735. metadata +778 -0
@@ -0,0 +1,16 @@
1
+ # AliasGlobalVariableNode -- `alias $copy $orig`.
2
+ #
3
+ # Compile-time only: Spinel registers $copy as a name pointing to
4
+ # $orig's storage slot. Subsequent reads/writes of either share
5
+ # state. Out of scope: dynamic alias from method body, since the
6
+ # entire compile-time map is built once at AST scan.
7
+
8
+ $orig = "hello"
9
+ alias $copy $orig
10
+ puts $copy # hello
11
+
12
+ $orig = "updated"
13
+ puts $copy # updated
14
+
15
+ $copy = "back"
16
+ puts $orig # back
@@ -0,0 +1,3 @@
1
+ hello
2
+ updated
3
+ back
@@ -0,0 +1,28 @@
1
+ # AliasMethodNode -- `alias greet hello` inside a class body.
2
+ #
3
+ # CRuby snapshots the method at alias time -- if `hello` is later
4
+ # redefined, `greet` still calls the original. In Spinel's AOT model
5
+ # methods are static C functions; we register a compile-time
6
+ # synonym so dispatch on `.greet` routes to the same C function as
7
+ # `.hello`. Out of scope: alias inside a method body (CRuby allows
8
+ # but the semantics differ); alias of an inherited method.
9
+
10
+ class Greeter
11
+ def hello = "hi from hello"
12
+ alias greet hello
13
+ end
14
+
15
+ g = Greeter.new
16
+ puts g.hello # hi from hello
17
+ puts g.greet # hi from hello
18
+
19
+ # Two aliases of the same method.
20
+ class Counter
21
+ def value = 42
22
+ alias get value
23
+ alias read value
24
+ end
25
+ c = Counter.new
26
+ puts c.value # 42
27
+ puts c.get # 42
28
+ puts c.read # 42
@@ -0,0 +1,5 @@
1
+ hi from hello
2
+ hi from hello
3
+ 42
4
+ 42
5
+ 42
@@ -0,0 +1,24 @@
1
+ # `a && b` codegen used to lower to raw C `a && b` regardless of
2
+ # operand type. When either operand is `sp_RbVal` (poly), C rejects
3
+ # `&&` between a struct and an int. Wrap poly operands with
4
+ # `sp_poly_truthy`.
5
+
6
+ class Holder
7
+ def initialize
8
+ @poly = "x" # string first…
9
+ @poly = 42 # …then int — slot widens to poly
10
+ @counter = 0
11
+ end
12
+
13
+ attr_reader :poly, :counter
14
+
15
+ def chain
16
+ if @poly && @counter == 0
17
+ @counter = 1
18
+ end
19
+ @counter
20
+ end
21
+ end
22
+
23
+ h = Holder.new
24
+ puts h.chain # 1
@@ -0,0 +1,47 @@
1
+ # Anonymous `&` block forwarding (Ruby 3.1+).
2
+ #
3
+ # `def outer(&); inner(&); end` declares an unnamed block parameter
4
+ # and forwards it via the matching anonymous `&` in the call. Pre-fix,
5
+ # the parameter `BlockParameterNode { name: nil }` was registered with
6
+ # an empty name, leaving the method without a `_block`/`lv_` slot, and
7
+ # the forwarding `BlockArgumentNode { expression: -1 }` got dropped at
8
+ # the call site (it slipped through `find_block_arg`'s -1 return).
9
+ #
10
+ # Fix synthesizes the internal name `__anon_block` for unnamed block
11
+ # params so they flow through `find_block_param_name` and
12
+ # `@current_method_block_param` like any other `&block`, and extends
13
+ # `block_forward_expr` to forward the current method's anon-block
14
+ # slot when it sees a BlockArgumentNode with no expression.
15
+
16
+ # 1. Top-level outer/inner with anonymous & forwarding.
17
+ def outer(&)
18
+ inner(&)
19
+ end
20
+
21
+ def inner(&block)
22
+ block.call
23
+ end
24
+
25
+ outer { puts "1-top-level" }
26
+
27
+ # 2. Anonymous & with a body that does work before forwarding.
28
+ def with_prefix(label, &)
29
+ puts label
30
+ inner(&)
31
+ end
32
+
33
+ with_prefix("2-prefix") { puts " body" }
34
+
35
+ # 3. Anonymous & on a class instance method, forwarding to another
36
+ # class instance method via typed-receiver dispatch.
37
+ class Outer
38
+ def kick(&)
39
+ sink(&)
40
+ end
41
+
42
+ def sink(&block)
43
+ block.call
44
+ end
45
+ end
46
+
47
+ Outer.new.kick { puts "3-class-method" }
@@ -0,0 +1,4 @@
1
+ 1-top-level
2
+ 2-prefix
3
+ body
4
+ 3-class-method
@@ -0,0 +1,48 @@
1
+ # Deep-nested array literals (3D and beyond). Spinel doesn't
2
+ # have a typed `<X>_ptr_array_ptr_array` slot — the second-level
3
+ # `[[1,2,3],[4,5,6]]` infers as `int_array_ptr_array` and the
4
+ # outer `[[[...]],[[...]]]` would naively box each element via
5
+ # `sp_box_ptr_array`, which erases the elem-type info and
6
+ # leaves the dispatch returning an unknown obj at the next `[]`
7
+ # read.
8
+ #
9
+ # Fix: when an array literal element is itself a typed
10
+ # ptr_array (or already poly_array) and the outer is
11
+ # poly_array, recompile the inner literal as poly_array so
12
+ # every level boxes via `sp_box_poly_array` / `sp_box_int_array`
13
+ # / etc. — the cls_id chain stays tagged and the poly-builtin
14
+ # dispatch recurses correctly through `arr[i][j][k]...`.
15
+ #
16
+ # The recursion in `compile_array_literal_as_poly` makes the
17
+ # fix dimension-agnostic — 3D, 4D, 5D, ... all work.
18
+ #
19
+ # Without the fix `read` returned 0 for every index (sp_box_nil
20
+ # fallback). With the fix it returns the right ints.
21
+
22
+ class H3
23
+ def initialize
24
+ @t = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
25
+ end
26
+ def read(i, j, k); @t[i][j][k]; end
27
+ end
28
+
29
+ h3 = H3.new
30
+ puts h3.read(0, 0, 0) # 1
31
+ puts h3.read(0, 1, 1) # 5
32
+ puts h3.read(1, 0, 2) # 9
33
+ puts h3.read(1, 1, 2) # 12
34
+
35
+ # 4D — recursion handles arbitrary depth.
36
+ class H4
37
+ def initialize
38
+ @t = [[[[1, 2], [3, 4]], [[5, 6], [7, 8]]],
39
+ [[[9, 10], [11, 12]], [[13, 14], [15, 16]]]]
40
+ end
41
+ def read(i, j, k, l); @t[i][j][k][l]; end
42
+ end
43
+
44
+ h4 = H4.new
45
+ puts h4.read(0, 0, 0, 0) # 1
46
+ puts h4.read(0, 1, 0, 1) # 6
47
+ puts h4.read(1, 0, 1, 0) # 11
48
+ puts h4.read(1, 1, 1, 1) # 16
@@ -0,0 +1,40 @@
1
+ # `Array#clear` on typed arrays used to fall through the
2
+ # dispatcher and produce no C output, leaving the array
3
+ # unchanged. Zero the length (and `start` for IntArray, which
4
+ # uses a sliding window) so the next push refills from index 0.
5
+
6
+ # IntArray
7
+ ints = [1, 2, 3]
8
+ ints.clear
9
+ puts ints.length # 0
10
+ ints.push(7)
11
+ puts ints[0] # 7
12
+
13
+ # SymArray (shares IntArray internally)
14
+ syms = [:a, :b, :c]
15
+ syms.clear
16
+ puts syms.length # 0
17
+
18
+ # FloatArray
19
+ floats = [1.5, 2.5, 3.5]
20
+ floats.clear
21
+ puts floats.length # 0
22
+
23
+ # StrArray
24
+ strs = ["a", "b", "c"]
25
+ strs.clear
26
+ puts strs.length # 0
27
+
28
+ # PtrArray (array of objects)
29
+ class Box
30
+ attr_reader :n
31
+ def initialize(n); @n = n; end
32
+ end
33
+ boxes = [Box.new(1), Box.new(2)]
34
+ boxes.clear
35
+ puts boxes.length # 0
36
+
37
+ # PolyArray (mixed-type elements)
38
+ mixed = [1, "x", :sym, 4.5]
39
+ mixed.clear
40
+ puts mixed.length # 0
@@ -0,0 +1,7 @@
1
+ 0
2
+ 7
3
+ 0
4
+ 0
5
+ 0
6
+ 0
7
+ 0
@@ -0,0 +1,18 @@
1
+ # Array#concat used to silently miss the type-check on both poly_array
2
+ # and ptr_array — the loop never ran, so the receiver kept its
3
+ # original length. Both shapes regression-tested here.
4
+
5
+ # poly_array (heterogeneous)
6
+ a = [1, "x"]
7
+ a.concat([2, "y"])
8
+ puts a.length
9
+
10
+ # ptr_array (user objects)
11
+ class Bar
12
+ def initialize(x); @x = x; end
13
+ attr_accessor :x
14
+ end
15
+
16
+ b = [Bar.new(1)]
17
+ b.concat([Bar.new(2), Bar.new(3)])
18
+ puts b.length
@@ -0,0 +1,2 @@
1
+ 4
2
+ 3
@@ -0,0 +1,17 @@
1
+ # Array#each_with_object on poly_array and ptr_array used to silently
2
+ # miss the type-check; the loop body never ran. Both shapes covered.
3
+
4
+ # poly_array (heterogeneous)
5
+ n = 0
6
+ [1, "x"].each_with_object("") {|_e, _a| n += 1 }
7
+ puts n
8
+
9
+ # ptr_array (user objects)
10
+ class Bar
11
+ def initialize(x); @x = x; end
12
+ attr_accessor :x
13
+ end
14
+
15
+ m = 0
16
+ [Bar.new(1), Bar.new(2)].each_with_object("") {|_e, _a| m += 1 }
17
+ puts m
@@ -0,0 +1,17 @@
1
+ # `arr.fill(val)` on a poly_array used to lower as
2
+ # `sp_PolyArray_set(arr, i, val)` with the raw scalar `val`. The
3
+ # storage is sp_RbVal — passing an unboxed int / str / float
4
+ # fails to compile (`incompatible type for argument 3 of
5
+ # sp_PolyArray_set`).
6
+ #
7
+ # Fix: wrap the value via `box_value_to_poly` first when the
8
+ # receiver is `poly_array`. Other typed-array fills (int / float
9
+ # / str / sym / ptr) keep their raw scalar path.
10
+
11
+ def make_arr
12
+ arr = [1, "two", 3.14] # heterogeneous → poly_array
13
+ arr.fill(42)
14
+ arr
15
+ end
16
+
17
+ p make_arr # [42, 42, 42]
@@ -0,0 +1,16 @@
1
+ # Array#flat_map where the block returns a poly_array / ptr_array
2
+ # failed to type the result; the inferred receiver-array type clashed
3
+ # with the generated inner accumulator. Both shapes covered.
4
+
5
+ # poly_array
6
+ a = [1, "x"].flat_map { |pe| [pe, pe] }
7
+ puts a.length
8
+
9
+ # ptr_array
10
+ class Bar
11
+ def initialize(x); @x = x; end
12
+ attr_accessor :x
13
+ end
14
+
15
+ b = [Bar.new(1), Bar.new(2)].flat_map { |re| [re, re] }
16
+ puts b.length
@@ -0,0 +1,29 @@
1
+ # Array-keyed Hash. `entries[[a, b]] ||= ...` was broken because
2
+ # spinel's PolyPolyHash defaulted to pointer-identity comparison
3
+ # for SP_TAG_OBJ keys — every fresh `[a, b]` literal allocated a
4
+ # new IntArray, so identical-content keys never matched and the
5
+ # `||=` never deduped. The cache grew unboundedly and reads with
6
+ # a fresh `[a, b]` returned nil.
7
+ #
8
+ # Fix: extend the codegen-emitted sp_obj_hash_hook /
9
+ # sp_obj_eql_hook to handle SP_BUILTIN_INT_ARRAY with element-wise
10
+ # content hash + comparison. Two IntArray instances with the same
11
+ # elements now hash and eql? identically — array-keyed Hash
12
+ # behaves like CRuby's `Hash` with the [a,b]-style key idiom.
13
+
14
+ entries = {}
15
+ entries[[1, 2]] = "a"
16
+ entries[[3, 4]] = "b"
17
+ entries[[1, 2]] ||= "z" # already set, no overwrite
18
+ puts entries[[1, 2]] # "a"
19
+ puts entries[[3, 4]] # "b"
20
+ puts entries.length # 2
21
+
22
+ # Heterogeneous keys still work — int / IntArray / string mixed.
23
+ mixed = {}
24
+ mixed[42] = "int-key"
25
+ mixed[[5, 6, 7]] = "arr-key"
26
+ mixed[[5, 6, 7]] ||= "no-overwrite"
27
+ puts mixed[42] # int-key
28
+ puts mixed[[5, 6, 7]] # arr-key
29
+ puts mixed.length # 2
@@ -0,0 +1,6 @@
1
+ a
2
+ b
3
+ 2
4
+ int-key
5
+ arr-key
6
+ 2
@@ -0,0 +1,15 @@
1
+ # A user class with a method whose name overlaps an Array method (e.g.
2
+ # `def sample`, `def first`) used to compile to the Array dispatch even
3
+ # when the receiver wasn't an array. `array_c_prefix` falls back to
4
+ # `IntArray`, so e.g. `m.sample` on `sp_Mixer *` emitted
5
+ # `sp_IntArray_get(m, rand() % sp_IntArray_length(m))` and gcc rejected
6
+ # the pointer-type mismatch.
7
+
8
+ class Mixer
9
+ def sample
10
+ 42
11
+ end
12
+ end
13
+
14
+ m = Mixer.new
15
+ puts m.sample
@@ -0,0 +1,37 @@
1
+ # `Array.new(N) { block }` should pick its accumulator container
2
+ # from the block's return type, not collapse to IntArray. Without
3
+ # the fix, `Array.new(N) { _x = [0]; _x.clear; _x }` (the seed-int
4
+ # idiom for an empty-but-typed inner array) emits a flat IntArray
5
+ # at the C level, then later `<<` pushes silently cast pointers
6
+ # to ints — every read returns 0.
7
+ #
8
+ # The fix mirrors compile_map_expr's range / typed-container
9
+ # branch: infer the block tail's type and emit StrArray /
10
+ # FloatArray / PtrArray<X> / PolyArray accordingly. Three call
11
+ # sites need it (infer_type, infer_ivar_init_type,
12
+ # compile_constructor_expr) so the ivar widening pipeline stays
13
+ # consistent.
14
+
15
+ class C
16
+ def initialize
17
+ @typed = Array.new(4) { _a = [0]; _a.clear; _a }
18
+ @strs = Array.new(3) { |i| "row#{i}" }
19
+ @flts = Array.new(3) { |i| i.to_f * 0.5 }
20
+ end
21
+ def push_typed(i, v); @typed[i] << v; end
22
+ def get_typed(i, j); @typed[i][j]; end
23
+ def get_str(i); @strs[i]; end
24
+ def get_flt(i); @flts[i]; end
25
+ end
26
+
27
+ c = C.new
28
+ c.push_typed(0, 100)
29
+ c.push_typed(0, 200)
30
+ c.push_typed(2, 999)
31
+ puts c.get_typed(0, 0) # 100
32
+ puts c.get_typed(0, 1) # 200
33
+ puts c.get_typed(2, 0) # 999
34
+ puts c.get_str(0) # row0
35
+ puts c.get_str(2) # row2
36
+ puts c.get_flt(0) # 0.0
37
+ puts c.get_flt(2) # 1.0
@@ -0,0 +1,7 @@
1
+ 100
2
+ 200
3
+ 999
4
+ row0
5
+ row2
6
+ 0.0
7
+ 1.0
@@ -0,0 +1,47 @@
1
+ # `Array.new(N) { [].dup }` returns an array of N empty-array
2
+ # inners. The static element type of `[]` is ambiguous — int_array
3
+ # is the natural default but if later pushes drop pointer-typed
4
+ # values (3-tuples, IntArrays, ...) into the inner, that fallback
5
+ # silently truncates the pointer to mrb_int and the cache is
6
+ # corrupt.
7
+ #
8
+ # After the fix, `Array.new(N) { [].dup }` (and `{ [] }`) emits
9
+ # each inner as a fresh sp_PolyArray. Pushes go through the
10
+ # sp_poly_shl runtime cls_id dispatch (any kind survives), and
11
+ # `arr[i][j]` reads back the boxed element with its real cls_id
12
+ # preserved. The outer Array.new returns `poly_array` so the
13
+ # whole structure is sp_PolyArray of sp_PolyArrays.
14
+ #
15
+ # Also covers the multi-write destructure poly RHS shape that
16
+ # arises naturally:
17
+ # `@a, @b, = entries[key]` against entries: poly_poly_hash whose
18
+ # values are 3-element arrays. compile_multi_write now recognizes
19
+ # val_t_local == "poly" and unboxes via cls_id-POLY_ARRAY check.
20
+
21
+ class C
22
+ def initialize
23
+ @inners = [Array.new(4) { [].dup }, Array.new(4) { [].dup }]
24
+ end
25
+ def add_tuple(b, i, io, ptr, shift)
26
+ entry = [io, ptr, shift]
27
+ @inners[b][i] << entry
28
+ end
29
+ def get_io(b, i, k); @inners[b][i][k][0]; end
30
+ def get_shift(b, i, k); @inners[b][i][k][2]; end
31
+ def len(b, i); @inners[b][i].length; end
32
+ end
33
+
34
+ c = C.new
35
+ inner_a = [10, 20, 30]
36
+ inner_b = [40, 50, 60]
37
+ c.add_tuple(0, 0, 0x100, inner_a, 4)
38
+ c.add_tuple(0, 0, 0x200, inner_b, 6)
39
+ c.add_tuple(1, 2, 0x300, inner_a, 0)
40
+ puts c.get_io(0, 0, 0) # 256
41
+ puts c.get_shift(0, 0, 0) # 4
42
+ puts c.get_io(0, 0, 1) # 512
43
+ puts c.get_shift(0, 0, 1) # 6
44
+ puts c.get_io(1, 2, 0) # 768
45
+ puts c.len(0, 0) # 2
46
+ puts c.len(1, 2) # 1
47
+ puts c.len(0, 3) # 0
@@ -0,0 +1,8 @@
1
+ 256
2
+ 4
3
+ 512
4
+ 6
5
+ 768
6
+ 2
7
+ 1
8
+ 0
@@ -0,0 +1,20 @@
1
+ # Regression: Array#partition (block form) returns a tuple holding two
2
+ # inner arrays. The tuple's sp_gc_alloc was emitted with scan=NULL, so
3
+ # the inner arrays were swept while the tuple was still alive, and a
4
+ # subsequent allocation reused the freed memory — `parts[0].length`
5
+ # came back as the length of whatever object now sat there.
6
+
7
+ arr = [1, 2, 3, 4, 5, 6]
8
+ parts = arr.partition { |x| x.odd? }
9
+
10
+ # Force many GCs by allocating lots of GC-managed objects.
11
+ i = 0
12
+ while i < 200000
13
+ tmp = [1, 2, 3]
14
+ tmp.push(i)
15
+ i += 1
16
+ end
17
+
18
+ puts parts[0].length # 3
19
+ puts parts[1].length # 3
20
+ puts "done"
@@ -0,0 +1,3 @@
1
+ 3
2
+ 3
3
+ done
@@ -0,0 +1,18 @@
1
+ # Array#+ used to fall through on poly_array / ptr_array — the result
2
+ # temp held its default 0 because the dispatcher's type-list omitted
3
+ # those shapes.
4
+
5
+ # poly_array
6
+ a = [1, "x"]
7
+ b = [2, "y"]
8
+ puts (a + b).length
9
+
10
+ # ptr_array
11
+ class Bar
12
+ def initialize(x); @x = x; end
13
+ attr_accessor :x
14
+ end
15
+
16
+ c = [Bar.new(1)]
17
+ d = [Bar.new(2)]
18
+ puts (c + d).length
@@ -0,0 +1,2 @@
1
+ 4
2
+ 2
@@ -0,0 +1,54 @@
1
+ # Array#rotate!(n): in-place left rotation by n positions.
2
+ # Previously the bang form was not dispatched at all and the codegen
3
+ # emitted a no-op, so `rotate!` left the array untouched.
4
+
5
+ # IntArray
6
+ ints = [1, 2, 3, 4, 5]
7
+ ints.rotate!(2)
8
+ ints.each { |i| puts i } # 3 4 5 1 2
9
+
10
+ # Negative n rotates right.
11
+ ints2 = [1, 2, 3, 4, 5]
12
+ ints2.rotate!(-1)
13
+ ints2.each { |i| puts i } # 5 1 2 3 4
14
+
15
+ # n larger than length wraps modulo len.
16
+ ints3 = [1, 2, 3]
17
+ ints3.rotate!(7)
18
+ ints3.each { |i| puts i } # 2 3 1
19
+
20
+ # Empty array is a no-op (no malloc, no crash).
21
+ empty = []
22
+ empty.rotate!(3)
23
+ puts empty.length # 0
24
+
25
+ # SymArray (shares the IntArray helper internally).
26
+ syms = [:a, :b, :c, :d]
27
+ syms.rotate!(1)
28
+ syms.each { |s| puts s } # b c d a
29
+
30
+ # FloatArray
31
+ floats = [1.5, 2.5, 3.5, 4.5]
32
+ floats.rotate!(2)
33
+ floats.each { |f| puts f } # 3.5 4.5 1.5 2.5
34
+
35
+ # StrArray
36
+ strs = ["a", "b", "c", "d"]
37
+ strs.rotate!(1)
38
+ strs.each { |s| puts s } # b c d a
39
+
40
+ # PtrArray (array of objects)
41
+ class Box
42
+ attr_reader :n
43
+ def initialize(n)
44
+ @n = n
45
+ end
46
+ end
47
+ boxes = [Box.new(10), Box.new(20), Box.new(30), Box.new(40)]
48
+ boxes.rotate!(2)
49
+ boxes.each { |b| puts b.n } # 30 40 10 20
50
+
51
+ # PolyArray (mixed-type elements)
52
+ mixed = [1, "x", :sym, 4.5]
53
+ mixed.rotate!(1)
54
+ mixed.each { |v| puts v } # x sym 4.5 1
@@ -0,0 +1,34 @@
1
+ 3
2
+ 4
3
+ 5
4
+ 1
5
+ 2
6
+ 5
7
+ 1
8
+ 2
9
+ 3
10
+ 4
11
+ 2
12
+ 3
13
+ 1
14
+ 0
15
+ b
16
+ c
17
+ d
18
+ a
19
+ 3.5
20
+ 4.5
21
+ 1.5
22
+ 2.5
23
+ b
24
+ c
25
+ d
26
+ a
27
+ 30
28
+ 40
29
+ 10
30
+ 20
31
+ x
32
+ sym
33
+ 4.5
34
+ 1
@@ -0,0 +1,11 @@
1
+ # Array#shuffle / Array#shuffle! used to skip ptr_array. The
2
+ # dispatcher silently fell through, the result temp ended up `0`,
3
+ # and the runtime had no PtrArray shuffle helper to call anyway.
4
+
5
+ class Bar
6
+ def initialize(x); @x = x; end
7
+ attr_accessor :x
8
+ end
9
+
10
+ arr = [Bar.new(1), Bar.new(2), Bar.new(3)]
11
+ puts arr.shuffle.length