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,81 @@
1
+ # Array#slice!(from, n) on every typed array. Returns a fresh
2
+ # array of n elements starting at `from`, and mutates the receiver
3
+ # to remove them. IntArray uses its `start` field for an O(1) head
4
+ # peel; the others shift the tail down to fill the hole.
5
+
6
+ # --- IntArray: head peel (from == 0) ---
7
+ arr = [10, 20, 30, 40, 50]
8
+ head = arr.slice!(0, 2)
9
+ puts head.length # 2
10
+ puts head[0] # 10
11
+ puts head[1] # 20
12
+ puts arr.length # 3
13
+ puts arr[0] # 30
14
+
15
+ # --- IntArray: middle slice (from > 0, tail shift) ---
16
+ arr2 = [1, 2, 3, 4, 5, 6, 7]
17
+ mid = arr2.slice!(2, 3)
18
+ puts mid[0] # 3
19
+ puts mid[2] # 5
20
+ puts arr2.length # 4
21
+ puts arr2[2] # 6 (tail shifted down)
22
+ puts arr2[3] # 7
23
+
24
+ # --- IntArray: n > available, clamped ---
25
+ arr3 = [100, 200, 300]
26
+ big = arr3.slice!(1, 999)
27
+ puts big.length # 2
28
+ puts arr3.length # 1
29
+
30
+ # --- FloatArray ---
31
+ fa = [1.5, 2.5, 3.5, 4.5, 5.5]
32
+ fh = fa.slice!(0, 2)
33
+ puts fh.length # 2
34
+ puts fh[0] # 1.5
35
+ puts fa.length # 3
36
+ puts fa[0] # 3.5
37
+
38
+ # --- StrArray ---
39
+ sa = ["a", "b", "c", "d", "e"]
40
+ sh = sa.slice!(1, 2)
41
+ puts sh.length # 2
42
+ puts sh[0] # b
43
+ puts sh[1] # c
44
+ puts sa.length # 3
45
+ puts sa[0] # a
46
+ puts sa[1] # d (tail shifted down)
47
+ puts sa[2] # e
48
+
49
+ # --- SymArray (shares the IntArray helper internally) ---
50
+ syms = [:foo, :bar, :baz, :qux]
51
+ sym_h = syms.slice!(0, 2)
52
+ puts sym_h.length # 2
53
+ puts sym_h[0] # foo
54
+ puts syms.length # 2
55
+ puts syms[0] # baz
56
+ puts syms[1] # qux
57
+
58
+ # --- PtrArray (array of obj_X instances) ---
59
+ class Box
60
+ attr_reader :v
61
+ def initialize(v); @v = v; end
62
+ end
63
+
64
+ pa = [Box.new(10), Box.new(20), Box.new(30), Box.new(40)]
65
+ ph = pa.slice!(1, 2)
66
+ puts ph.length # 2
67
+ puts ph[0].v # 20
68
+ puts ph[1].v # 30
69
+ puts pa.length # 2
70
+ puts pa[0].v # 10
71
+ puts pa[1].v # 40 (tail shifted down)
72
+
73
+ # --- PolyArray (heterogeneous literal) ---
74
+ poly = [1, "two", :three, 4.5, "five"]
75
+ poly_h = poly.slice!(1, 3)
76
+ puts poly_h.length # 3
77
+ puts poly_h[0] # two
78
+ puts poly_h[2] # 4.5
79
+ puts poly.length # 2
80
+ puts poly[0] # 1
81
+ puts poly[1] # five
@@ -0,0 +1,40 @@
1
+ 2
2
+ 10
3
+ 20
4
+ 3
5
+ 30
6
+ 3
7
+ 5
8
+ 4
9
+ 6
10
+ 7
11
+ 2
12
+ 1
13
+ 2
14
+ 1.5
15
+ 3
16
+ 3.5
17
+ 2
18
+ b
19
+ c
20
+ 3
21
+ a
22
+ d
23
+ e
24
+ 2
25
+ foo
26
+ 2
27
+ baz
28
+ qux
29
+ 2
30
+ 20
31
+ 30
32
+ 2
33
+ 10
34
+ 40
35
+ 3
36
+ two
37
+ 4.5
38
+ 2
39
+ 1
40
+ five
@@ -0,0 +1,77 @@
1
+ # Test attr_accessor, attr_reader, attr_writer, class methods, for..in, loop
2
+
3
+ class Point
4
+ attr_accessor :x, :y
5
+
6
+ def initialize(x, y)
7
+ @x = x
8
+ @y = y
9
+ end
10
+
11
+ def self.origin
12
+ Point.new(0, 0)
13
+ end
14
+
15
+ def distance_to(other)
16
+ dx = @x - other.x
17
+ dy = @y - other.y
18
+ Math.sqrt(dx * dx + dy * dy)
19
+ end
20
+
21
+ def to_s
22
+ "(" + @x.to_s + ", " + @y.to_s + ")"
23
+ end
24
+ end
25
+
26
+ p1 = Point.new(3, 4)
27
+ puts p1.x # 3
28
+ puts p1.y # 4
29
+ p1.x = 10
30
+ puts p1.x # 10
31
+
32
+ p2 = Point.origin
33
+ puts p2.x # 0
34
+
35
+ # for..in with range
36
+ total = 0
37
+ for i in 1..10
38
+ total += i
39
+ end
40
+ puts total # 55
41
+
42
+ # loop with break
43
+ count = 0
44
+ loop do
45
+ count += 1
46
+ break if count >= 5
47
+ end
48
+ puts count # 5
49
+
50
+ # Array#each with index (using each)
51
+ arr = (1..5).to_a
52
+ sum = 0
53
+ arr.each do |x|
54
+ sum += x
55
+ end
56
+ puts sum # 15
57
+
58
+ # String#to_s on object
59
+ puts p1.to_s # (10, 4)
60
+
61
+ # attr_accessor path should keep ivar/local namespaces distinct.
62
+ class IvarCollision
63
+ attr_accessor :x, :iv_x
64
+
65
+ def initialize
66
+ @x = 1
67
+ @iv_x = 2
68
+ end
69
+
70
+ def sum
71
+ x = 10
72
+ iv_x = 20
73
+ @x + @iv_x + self.x + self.iv_x + x + iv_x
74
+ end
75
+ end
76
+
77
+ puts IvarCollision.new.sum # 36
@@ -0,0 +1,9 @@
1
+ 3
2
+ 4
3
+ 10
4
+ 0
5
+ 55
6
+ 5
7
+ 15
8
+ (10, 4)
9
+ 36
@@ -0,0 +1,24 @@
1
+ # `obj.attr = v` codegen emitted `slot = arg0` regardless of slot
2
+ # type. When the slot is poly (sp_RbVal — widened by heterogeneous
3
+ # writes) and the rhs is typed (int / string / obj_X / ...), C
4
+ # rejects the assignment as a struct-from-scalar/pointer mismatch.
5
+
6
+ class Bag
7
+ attr_accessor :item
8
+ def initialize
9
+ @item = "tag" # string first…
10
+ @item = 5 # …then int — slot widens to poly
11
+ end
12
+ end
13
+
14
+ class Caller
15
+ def stuff(bag)
16
+ bag.item = 99 # statement-form attr-writer on poly slot
17
+ bag.item
18
+ end
19
+ end
20
+
21
+ b = Bag.new
22
+ puts Caller.new.stuff(b) # 99
23
+ puts (b.item = 7) # 7 (expression-form; `=` returns rhs)
24
+ puts b.item # 7
@@ -0,0 +1,29 @@
1
+ # Expression-form `obj.attr = rhs` on a poly slot used to lower to
2
+ # the comma expression `(slot = box(rhs), rhs)`, which evaluates rhs
3
+ # textually twice in C. If rhs has side effects (a method call, a
4
+ # string allocation, etc.) they run twice. Verify rhs runs exactly
5
+ # once by spilling to a typed temp via statement expression.
6
+
7
+ class Counter
8
+ def initialize
9
+ @n = 0
10
+ end
11
+ def step
12
+ @n = @n + 1
13
+ @n
14
+ end
15
+ end
16
+
17
+ class Bag
18
+ attr_accessor :item
19
+ def initialize
20
+ @item = "tag" # widen slot to poly via heterogeneous writes
21
+ @item = 5
22
+ end
23
+ end
24
+
25
+ c = Counter.new
26
+ b = Bag.new
27
+ puts (b.item = c.step) # 1 (chain value is rhs; step runs once)
28
+ puts (b.item = c.step) # 2
29
+ puts (b.item = c.step) # 3
@@ -0,0 +1,23 @@
1
+ # `obj.attr = v` as an expression should evaluate to `v`, the rhs,
2
+ # matching Ruby semantics. Codegen used to emit `(rc->iv = v, 0)` —
3
+ # the trailing `, 0` made the C expression value `0`, so chained
4
+ # writes `local = obj.attr = v` saw 0 instead of v.
5
+
6
+ class Box
7
+ attr_accessor :n
8
+ def initialize
9
+ @n = 0
10
+ end
11
+ end
12
+
13
+ b = Box.new
14
+ local = (b.n = 42)
15
+ puts local # 42
16
+ puts b.n # 42
17
+
18
+ # Chained variant — both lvalues should land on the same rhs value.
19
+ b1 = Box.new
20
+ b2 = Box.new
21
+ b1.n = b2.n = 7
22
+ puts b1.n # 7
23
+ puts b2.n # 7
@@ -0,0 +1,38 @@
1
+ # Followup to PR #347: when a poly RHS is auto-unboxed into an
2
+ # int local slot, the slot's tracked type must stay int so a
3
+ # *subsequent* poly RHS write also unboxes. Without this, the
4
+ # first auto-unbox-write widened the slot's tracked type to
5
+ # poly; the second poly write then emitted `lv = <sp_RbVal>;`
6
+ # (no unbox) into the still-int C declaration, failing the C
7
+ # compile (`incompatible types when assigning to type 'mrb_int'
8
+ # from type 'sp_RbVal'`).
9
+ #
10
+ # Reproduces optcarrot's chained `pixel0 = sprite[N]` writes:
11
+ # the function-level slot stays mrb_int (set by an earlier
12
+ # int_array read), but later sprite[N] writes are poly.
13
+
14
+ class C
15
+ def make_int_arr; @arr = [10, 20, 30]; end
16
+ def make_poly_arr
17
+ @arr = [nil] * 3
18
+ @arr[0] = 100
19
+ @arr[1] = 200
20
+ @arr[2] = 300
21
+ end
22
+ def at(i); @arr[i]; end
23
+ end
24
+
25
+ c = C.new
26
+
27
+ # Two consecutive poly RHS writes into the same int slot. Both
28
+ # must auto-unbox; without the fix, the second one fails C compile.
29
+ c.make_int_arr
30
+ val = c.at(0) # int RHS, val slot established as int
31
+ puts val
32
+
33
+ c.make_poly_arr
34
+ val = c.at(0) # 1st poly RHS — already worked in PR #347
35
+ puts val
36
+
37
+ val = c.at(2) # 2nd poly RHS — must also unbox; failed pre-fix
38
+ puts val
@@ -0,0 +1,36 @@
1
+ # Auto-unbox poly RHS into a primitive int local slot. Common
2
+ # case: `lv = arr[i]` where arr's element dispatch returns poly
3
+ # (heterogeneous element types) but the local was already inferred
4
+ # as int from a prior write. Spinel previously emitted
5
+ # `lv = <sp_RbVal>;` and the C compile failed (`incompatible
6
+ # types when assigning to type 'mrb_int' from type 'sp_RbVal'`).
7
+ #
8
+ # Repro: an ivar widened to poly via two distinct array shapes
9
+ # (an int_array and a poly_array). The local `pixel` was first
10
+ # set from an int_array (so its declared C type is mrb_int),
11
+ # then a second write reassigns from the poly slot. Without
12
+ # auto-unbox, the second assignment fails.
13
+
14
+ class C
15
+ def make_int_arr
16
+ @arr = [10, 20, 30]
17
+ end
18
+ def make_poly_arr
19
+ @arr = [nil] * 3
20
+ @arr[0] = 99
21
+ @arr[1] = "x"
22
+ @arr[2] = :y
23
+ end
24
+ def first_int
25
+ @arr[0]
26
+ end
27
+ end
28
+
29
+ c = C.new
30
+ c.make_int_arr
31
+ pixel = c.first_int # int from int_array
32
+ puts pixel.to_s
33
+
34
+ c.make_poly_arr
35
+ pixel = c.first_int # poly from poly_array, must auto-unbox
36
+ puts pixel.to_s
@@ -0,0 +1,21 @@
1
+ # BackReferenceReadNode -- `$&`, `$~`, `$'`, $`.
2
+ #
3
+ # Special globals populated by regex matches. Spinel's regex engine
4
+ # already populates sp_re_match* state for $1..$9 (NumberedReferenceReadNode);
5
+ # this extends to the symbolic back-references.
6
+ #
7
+ # $& -- the entire matched substring
8
+ # $~ -- the MatchData object (aliased to $& in Spinel; no MatchData wrapper)
9
+ # $` -- the substring before the match
10
+ # $' -- the substring after the match
11
+
12
+ "hello world" =~ /lo wo/
13
+ puts $& # lo wo
14
+ puts $` # hel
15
+ puts $' # rld
16
+
17
+ # Re-match updates the state
18
+ "abcdef" =~ /cd/
19
+ puts $& # cd
20
+ puts $` # ab
21
+ puts $' # ef
@@ -0,0 +1,6 @@
1
+ lo wo
2
+ hel
3
+ rld
4
+ cd
5
+ ab
6
+ ef
@@ -0,0 +1,46 @@
1
+ # Issue #314 follow-up: a class method whose return type was
2
+ # inferred as `obj_<C>` (because every explicit return path
3
+ # produced a value of that class) lowered a bare `return` to
4
+ # `return self;` — but class methods have no `self` C param, so
5
+ # gcc complained `'self' undeclared`.
6
+ #
7
+ # Fix: thread a `@current_method_has_self` flag through the
8
+ # instance-method / class-method / top-level / constructor-
9
+ # synthesis emit paths. compile_return_stmt's bare-return-with-
10
+ # obj_<C>-return path emits `return self;` only when has_self=1,
11
+ # otherwise `return c_return_default(...);` (which knows about
12
+ # value vs pointer object types).
13
+ #
14
+ # Companion to b9d6303 (#337) which added the obj_<C> branch for
15
+ # constructor synthesis.
16
+ #
17
+ # Surfaced via Roundhouse's `InMemoryAdapter.update` — a module
18
+ # class method whose return type was inferred as obj_HWIA via
19
+ # the `attrs.each` last-expression, with an early `return if
20
+ # row.nil?` lowering to broken `return self;`.
21
+
22
+ class Holder
23
+ attr_reader :id
24
+ def initialize(id)
25
+ @id = id
26
+ end
27
+
28
+ def self.maybe(id)
29
+ if id < 0
30
+ return # ← bare return; bug emitted `return self;`
31
+ end
32
+ Holder.new(id)
33
+ end
34
+ end
35
+
36
+ # Pushing into a [Holder] array forces Holder out of the value-type
37
+ # bucket so `Holder.maybe` returns `sp_Holder *` (pointer) and the
38
+ # bare-return shape exercises the pointer fallback.
39
+ holders = [Holder.new(0)]
40
+
41
+ a = Holder.maybe(42)
42
+ holders << a
43
+ puts a.id # 42
44
+
45
+ b = Holder.maybe(-1)
46
+ puts b.nil? # true
@@ -0,0 +1,55 @@
1
+ # Issue #337: a bare `return` (Ruby's "exit early" form) inside an
2
+ # `initialize` body used to lower to `return 0;` regardless of the
3
+ # wrapping function's C return type. Two emit shapes were affected:
4
+ #
5
+ # - `sp_<C>_new(...)` (sp_<C> *-returning, the heap-allocated
6
+ # constructor synthesis): `return 0;` silently NULLed the
7
+ # instance on the early-return branch — semantically wrong, no C
8
+ # diagnostic.
9
+ #
10
+ # - `sp_<C>_initialize(...)` (void-returning, used for `super`
11
+ # chains): `return 0;` is a `void function should not return a
12
+ # value` error under strict C compile.
13
+ #
14
+ # Fix: pin @current_method_return per emission shape (obj_<C> for
15
+ # the _new synthesis, "void" for the _initialize wrapper) so the
16
+ # bare-return path picks the right C statement — `return self;` for
17
+ # heap constructors (returns the partially-initialized instance,
18
+ # matching the issue's expected-behavior table) and `return;` for
19
+ # the void wrapper.
20
+
21
+ class Box
22
+ attr_reader :data
23
+ def initialize(other = nil)
24
+ @data = "ok"
25
+ return if other.nil?
26
+ @data = other
27
+ end
28
+ end
29
+
30
+ # Default-construct: the bare `return` inside initialize fires;
31
+ # `@data` stays at "ok".
32
+ b1 = Box.new
33
+ puts b1.data # ok
34
+
35
+ # Pass an explicit value: the early return is skipped; `@data` is
36
+ # overwritten.
37
+ b2 = Box.new("hi")
38
+ puts b2.data # hi
39
+
40
+ # Subclass exercising the void `_initialize` super-call form: the
41
+ # parent's bare return inside the wrapper must lower to `return;`
42
+ # (not `return 0;`, which would be a C error in a void function).
43
+ class TaggedBox < Box
44
+ attr_reader :tag
45
+ def initialize(other = nil, tag:)
46
+ super(other)
47
+ @tag = tag
48
+ end
49
+ end
50
+
51
+ t = TaggedBox.new("payload", tag: "label")
52
+ puts t.tag # label
53
+
54
+ t2 = TaggedBox.new(tag: "empty")
55
+ puts t2.tag # empty
@@ -0,0 +1,4 @@
1
+ ok
2
+ hi
3
+ label
4
+ empty
@@ -0,0 +1,26 @@
1
+ # Issue #383: bare `return` (no value) in a method whose declared
2
+ # return type is `sp_RbVal` (poly) emitted literal `return 0;`
3
+ # instead of `return sp_box_nil();` — gcc errors `incompatible
4
+ # types when returning type 'int' but 'sp_RbVal' was expected`.
5
+ # The implicit end-of-function fallthrough already emitted the
6
+ # correct boxed nil; only bare-return statements were missed.
7
+ #
8
+ # Sister to the void-initialize and obj_<C>-class-method fixes
9
+ # (#337 / #314 follow-up). compile_return_stmt's bare-return
10
+ # path now has a poly arm that emits `sp_box_nil()`.
11
+
12
+ class Adapter
13
+ def self.lookup(key)
14
+ return unless key == "x" # poly-returning fn, bare return
15
+ if key.length > 5
16
+ "long-string"
17
+ else
18
+ [1, 2, 3]
19
+ end
20
+ end
21
+ end
22
+
23
+ # Heterogeneous return types collapse to poly; the bare-return
24
+ # branch needs to box nil into the same slot.
25
+ puts Adapter.lookup("x").to_s
26
+ puts Adapter.lookup("none").to_s
@@ -0,0 +1,43 @@
1
+ # Bigint division / modulo by zero raises ZeroDivisionError.
2
+ #
3
+ # Bigint detection: `a = a * 2` inside a `while` loop promotes the
4
+ # local to bigint via scan_bigint_in_loop_node. Raising 1 by *2 50
5
+ # times overflows the mrb_int range so `a` is bigint-typed by the
6
+ # time we hit the / 0 expression.
7
+ #
8
+ # Runtime path: sp_bigint_div / sp_bigint_mod call into mini-gmp,
9
+ # which detects the zero divisor at sp_bigint.c:2718 and calls
10
+ # mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0"). The mrb_raise
11
+ # macro now dispatches to sp_bigint_raise_zerodiv (defined non-
12
+ # static in sp_runtime.h, linked from gen.c), which calls
13
+ # sp_raise_cls — same longjmp path as the int-div case.
14
+
15
+ a = 1
16
+ i = 0
17
+ while i < 50
18
+ a = a * 2
19
+ i = i + 1
20
+ end
21
+
22
+ # `a` is now 2^50, well above the mrb_int range — bigint-typed.
23
+
24
+ begin
25
+ x = a / 0
26
+ puts "no raise"
27
+ rescue ZeroDivisionError => e
28
+ puts "caught bigint div: #{e}"
29
+ end
30
+
31
+ begin
32
+ x = a % 0
33
+ puts "no raise"
34
+ rescue ZeroDivisionError => e
35
+ puts "caught bigint mod: #{e}"
36
+ end
37
+
38
+ # Bare rescue also catches.
39
+ begin
40
+ a / 0
41
+ rescue => e
42
+ puts "bare-rescue: #{e}"
43
+ end
@@ -0,0 +1,3 @@
1
+ caught bigint div: divided by 0
2
+ caught bigint mod: divided by 0
3
+ bare-rescue: divided by 0
@@ -0,0 +1,31 @@
1
+ # Test block_given? and optional blocks
2
+
3
+ def maybe_yield(x)
4
+ if block_given?
5
+ yield x
6
+ else
7
+ x * 2
8
+ end
9
+ end
10
+
11
+ puts maybe_yield(5) # 10 (no block)
12
+
13
+ result = 0
14
+ maybe_yield(5) do |n|
15
+ result = n * 3
16
+ end
17
+ puts result # 15
18
+
19
+ # Method that always yields
20
+ def each_pair(a, b)
21
+ yield a
22
+ yield b
23
+ end
24
+
25
+ total = 0
26
+ each_pair(10, 20) do |n|
27
+ total += n
28
+ end
29
+ puts total # 30
30
+
31
+ puts "done"
@@ -0,0 +1,4 @@
1
+ 10
2
+ 15
3
+ 30
4
+ done