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,286 @@
1
+ /*
2
+ * stringio.c — StringIO C implementation for Spinel
3
+ *
4
+ * Provides sp_StringIO_* functions that the generated C code calls.
5
+ * In-memory IO object with a growable string buffer.
6
+ *
7
+ * Usage: cc -O2 app.c lib/stringio.c -lm -o app
8
+ */
9
+
10
+ #include <stdio.h>
11
+ #include <stdlib.h>
12
+ #include <string.h>
13
+ #include <stdint.h>
14
+ #include <stdarg.h>
15
+
16
+ typedef struct {
17
+ char *buf; /* heap-allocated buffer */
18
+ int64_t len; /* current string length */
19
+ int64_t cap; /* buffer capacity */
20
+ int64_t pos; /* current read/write position */
21
+ int64_t lineno; /* line number counter (for gets) */
22
+ int closed; /* 1 if closed */
23
+ } sp_StringIO;
24
+
25
+ /* Internal: ensure buffer has room for `need` more bytes */
26
+ static void sio_grow(sp_StringIO *sio, int64_t need) {
27
+ int64_t required = sio->pos + need;
28
+ if (required <= sio->cap) return;
29
+ int64_t new_cap = sio->cap ? sio->cap : 64;
30
+ while (new_cap < required) new_cap *= 2;
31
+ sio->buf = (char *)realloc(sio->buf, new_cap + 1);
32
+ sio->cap = new_cap;
33
+ }
34
+
35
+ /* Internal: write bytes at current position, extending buffer as needed */
36
+ static int64_t sio_write(sp_StringIO *sio, const char *data, int64_t data_len) {
37
+ sio_grow(sio, data_len);
38
+ /* Fill gap with zeros if pos > len */
39
+ if (sio->pos > sio->len) {
40
+ memset(sio->buf + sio->len, 0, sio->pos - sio->len);
41
+ }
42
+ memcpy(sio->buf + sio->pos, data, data_len);
43
+ sio->pos += data_len;
44
+ if (sio->pos > sio->len) sio->len = sio->pos;
45
+ sio->buf[sio->len] = '\0';
46
+ return data_len;
47
+ }
48
+
49
+ /* Constructor: StringIO.new or StringIO.new("initial") */
50
+ sp_StringIO *sp_StringIO_new(void) {
51
+ sp_StringIO *sio = (sp_StringIO *)calloc(1, sizeof(sp_StringIO));
52
+ sio->buf = (char *)calloc(1, 64);
53
+ sio->cap = 63;
54
+ return sio;
55
+ }
56
+
57
+ sp_StringIO *sp_StringIO_new_s(const char *initial) {
58
+ sp_StringIO *sio = (sp_StringIO *)calloc(1, sizeof(sp_StringIO));
59
+ int64_t len = (int64_t)strlen(initial);
60
+ int64_t cap = len < 63 ? 63 : len;
61
+ sio->buf = (char *)malloc(cap + 1);
62
+ memcpy(sio->buf, initial, len);
63
+ sio->buf[len] = '\0';
64
+ sio->len = len;
65
+ sio->cap = cap;
66
+ sio->pos = 0;
67
+ return sio;
68
+ }
69
+
70
+ /* string — return the buffer contents as a C string */
71
+ const char *sp_StringIO_string(sp_StringIO *sio) {
72
+ return sio->buf ? sio->buf : "";
73
+ }
74
+
75
+ /* pos / tell — current position */
76
+ int64_t sp_StringIO_pos(sp_StringIO *sio) {
77
+ return sio->pos;
78
+ }
79
+
80
+ /* pos= — set position */
81
+ int64_t sp_StringIO_set_pos(sp_StringIO *sio, int64_t new_pos) {
82
+ if (new_pos < 0) new_pos = 0;
83
+ sio->pos = new_pos;
84
+ return sio->pos;
85
+ }
86
+
87
+ /* lineno */
88
+ int64_t sp_StringIO_lineno(sp_StringIO *sio) {
89
+ return sio->lineno;
90
+ }
91
+
92
+ /* size / length — string length */
93
+ int64_t sp_StringIO_size(sp_StringIO *sio) {
94
+ return sio->len;
95
+ }
96
+
97
+ /* write(str) — write string at current position, return bytes written */
98
+ int64_t sp_StringIO_write(sp_StringIO *sio, const char *str) {
99
+ return sio_write(sio, str, (int64_t)strlen(str));
100
+ }
101
+
102
+ /* puts(str) — write string + newline */
103
+ int64_t sp_StringIO_puts(sp_StringIO *sio, const char *str) {
104
+ int64_t slen = (int64_t)strlen(str);
105
+ sio_write(sio, str, slen);
106
+ /* Add newline unless string already ends with one */
107
+ if (slen == 0 || str[slen - 1] != '\n')
108
+ sio_write(sio, "\n", 1);
109
+ return 0; /* Ruby puts returns nil */
110
+ }
111
+
112
+ /* puts() with no args — just a newline */
113
+ int64_t sp_StringIO_puts_empty(sp_StringIO *sio) {
114
+ sio_write(sio, "\n", 1);
115
+ return 0;
116
+ }
117
+
118
+ /* print(str) — write string without newline */
119
+ int64_t sp_StringIO_print(sp_StringIO *sio, const char *str) {
120
+ return sio_write(sio, str, (int64_t)strlen(str));
121
+ }
122
+
123
+ /* putc(ch) — write a single character (integer or first char of string) */
124
+ int64_t sp_StringIO_putc(sp_StringIO *sio, int64_t ch) {
125
+ char c = (char)(ch & 0xFF);
126
+ sio_write(sio, &c, 1);
127
+ return ch;
128
+ }
129
+
130
+ /* << operator — append, return self (for chaining) */
131
+ sp_StringIO *sp_StringIO_append(sp_StringIO *sio, const char *str) {
132
+ sio_write(sio, str, (int64_t)strlen(str));
133
+ return sio;
134
+ }
135
+
136
+ /* read() — read from pos to end */
137
+ const char *sp_StringIO_read(sp_StringIO *sio) {
138
+ if (sio->pos >= sio->len) return "";
139
+ const char *result = sio->buf + sio->pos;
140
+ sio->pos = sio->len;
141
+ return result;
142
+ }
143
+
144
+ /* read(length) — read up to length bytes */
145
+ const char *sp_StringIO_read_n(sp_StringIO *sio, int64_t length) {
146
+ if (sio->pos >= sio->len) return NULL;
147
+ int64_t remaining = sio->len - sio->pos;
148
+ if (length > remaining) length = remaining;
149
+ /* Return a temporary substring — caller should copy if needed */
150
+ static char read_buf[65536];
151
+ if (length >= (int64_t)sizeof(read_buf)) length = sizeof(read_buf) - 1;
152
+ memcpy(read_buf, sio->buf + sio->pos, length);
153
+ read_buf[length] = '\0';
154
+ sio->pos += length;
155
+ return read_buf;
156
+ }
157
+
158
+ /* gets — read one line (up to and including \n), return NULL at EOF */
159
+ const char *sp_StringIO_gets(sp_StringIO *sio) {
160
+ if (sio->pos >= sio->len) return NULL;
161
+ const char *start = sio->buf + sio->pos;
162
+ const char *nl = memchr(start, '\n', sio->len - sio->pos);
163
+ int64_t line_len;
164
+ if (nl) {
165
+ line_len = (nl - start) + 1;
166
+ }
167
+ else {
168
+ line_len = sio->len - sio->pos;
169
+ }
170
+ /* Return a temporary buffer */
171
+ static char gets_buf[65536];
172
+ if (line_len >= (int64_t)sizeof(gets_buf)) line_len = sizeof(gets_buf) - 1;
173
+ memcpy(gets_buf, start, line_len);
174
+ gets_buf[line_len] = '\0';
175
+ sio->pos += line_len;
176
+ sio->lineno++;
177
+ return gets_buf;
178
+ }
179
+
180
+ /* getc — read one character, return NULL at EOF */
181
+ const char *sp_StringIO_getc(sp_StringIO *sio) {
182
+ if (sio->pos >= sio->len) return NULL;
183
+ static char getc_buf[2];
184
+ getc_buf[0] = sio->buf[sio->pos++];
185
+ getc_buf[1] = '\0';
186
+ return getc_buf;
187
+ }
188
+
189
+ /* getbyte — read one byte as integer, return -1 at EOF */
190
+ int64_t sp_StringIO_getbyte(sp_StringIO *sio) {
191
+ if (sio->pos >= sio->len) return -1;
192
+ return (int64_t)(unsigned char)sio->buf[sio->pos++];
193
+ }
194
+
195
+ /* rewind — reset position and lineno to 0 */
196
+ int64_t sp_StringIO_rewind(sp_StringIO *sio) {
197
+ sio->pos = 0;
198
+ sio->lineno = 0;
199
+ return 0;
200
+ }
201
+
202
+ /* seek(offset, whence) — set position, whence: 0=SET, 1=CUR, 2=END */
203
+ int64_t sp_StringIO_seek(sp_StringIO *sio, int64_t offset, int64_t whence) {
204
+ int64_t new_pos;
205
+ switch (whence) {
206
+ case 1: new_pos = sio->pos + offset; break; /* SEEK_CUR */
207
+ case 2: new_pos = sio->len + offset; break; /* SEEK_END */
208
+ default: new_pos = offset; break; /* SEEK_SET */
209
+ }
210
+ if (new_pos < 0) new_pos = 0;
211
+ sio->pos = new_pos;
212
+ return 0;
213
+ }
214
+
215
+ /* eof? — true if at or past end */
216
+ int sp_StringIO_eof_p(sp_StringIO *sio) {
217
+ return sio->pos >= sio->len;
218
+ }
219
+
220
+ /* truncate(length) — truncate buffer to given length */
221
+ int64_t sp_StringIO_truncate(sp_StringIO *sio, int64_t length) {
222
+ if (length < 0) length = 0;
223
+ if (length < sio->len) {
224
+ sio->len = length;
225
+ sio->buf[length] = '\0';
226
+ }
227
+ return 0;
228
+ }
229
+
230
+ /* close — mark as closed */
231
+ int64_t sp_StringIO_close(sp_StringIO *sio) {
232
+ sio->closed = 1;
233
+ return 0;
234
+ }
235
+
236
+ /* closed? */
237
+ int sp_StringIO_closed_p(sp_StringIO *sio) {
238
+ return sio->closed;
239
+ }
240
+
241
+ /* flush — no-op for StringIO, return self */
242
+ sp_StringIO *sp_StringIO_flush(sp_StringIO *sio) {
243
+ return sio;
244
+ }
245
+
246
+ /* sync — always true */
247
+ int sp_StringIO_sync(sp_StringIO *sio) {
248
+ (void)sio;
249
+ return 1;
250
+ }
251
+
252
+ /* isatty / tty? — always false */
253
+ int sp_StringIO_isatty(sp_StringIO *sio) {
254
+ (void)sio;
255
+ return 0;
256
+ }
257
+
258
+ /* fileno — nil (returns -1 for C) */
259
+ int64_t sp_StringIO_fileno(sp_StringIO *sio) {
260
+ (void)sio;
261
+ return -1;
262
+ }
263
+
264
+ /* printf(fmt, ...) — formatted print to buffer */
265
+ int64_t sp_StringIO_printf(sp_StringIO *sio, const char *fmt, ...) {
266
+ char tmp[8192];
267
+ va_list ap;
268
+ va_start(ap, fmt);
269
+ int n = vsnprintf(tmp, sizeof(tmp), fmt, ap);
270
+ va_end(ap);
271
+ if (n > 0) sio_write(sio, tmp, n);
272
+ return n;
273
+ }
274
+
275
+ /* string= — replace buffer contents */
276
+ void sp_StringIO_set_string(sp_StringIO *sio, const char *str) {
277
+ int64_t len = (int64_t)strlen(str);
278
+ if (len > sio->cap) {
279
+ sio->cap = len;
280
+ sio->buf = (char *)realloc(sio->buf, sio->cap + 1);
281
+ }
282
+ memcpy(sio->buf, str, len);
283
+ sio->buf[len] = '\0';
284
+ sio->len = len;
285
+ sio->pos = 0;
286
+ }
@@ -0,0 +1,5 @@
1
+ # Spinel lib: stringio
2
+ #
3
+ # StringIO is a built-in type in Spinel (SPINEL_TYPE_STRINGIO).
4
+ # This file exists only so that `require "stringio"` resolves successfully.
5
+ # All StringIO methods are compiled directly to sp_StringIO_* C functions.
@@ -0,0 +1,170 @@
1
+ /*
2
+ * strscan.c — StringScanner C implementation for Spinel
3
+ *
4
+ * Provides sp_StringScanner_* functions that the generated C code calls.
5
+ * Requires oniguruma: link with -lonig
6
+ *
7
+ * Usage: cc -O2 app.c lib/strscan.c -lonig -lm -o app
8
+ */
9
+
10
+ #include <stdio.h>
11
+ #include <stdlib.h>
12
+ #include <string.h>
13
+ #include <stdint.h>
14
+ #include <oniguruma.h>
15
+
16
+ typedef struct {
17
+ const char *source; /* original string (not owned) */
18
+ int64_t source_len;
19
+ int64_t pos; /* current scan position */
20
+ int64_t last_pos; /* position before last scan (for unscan) */
21
+ char *matched; /* last matched string (heap-allocated) */
22
+ int64_t matched_len;
23
+ } sp_StringScanner;
24
+
25
+ /* Constructor */
26
+ sp_StringScanner *sp_StringScanner_new(const char *str) {
27
+ sp_StringScanner *sc = (sp_StringScanner *)calloc(1, sizeof(sp_StringScanner));
28
+ sc->source = str;
29
+ sc->source_len = (int64_t)strlen(str);
30
+ sc->pos = 0;
31
+ sc->last_pos = 0;
32
+ sc->matched = NULL;
33
+ sc->matched_len = 0;
34
+ return sc;
35
+ }
36
+
37
+ /* Internal: set matched string */
38
+ static void sc_set_matched(sp_StringScanner *sc, const char *start, int64_t len) {
39
+ free(sc->matched);
40
+ sc->matched = (char *)malloc(len + 1);
41
+ memcpy(sc->matched, start, len);
42
+ sc->matched[len] = '\0';
43
+ sc->matched_len = len;
44
+ }
45
+
46
+ /* scan(pattern) — match at current position, advance if matched */
47
+ const char *sp_StringScanner_scan(sp_StringScanner *sc, regex_t *re) {
48
+ if (sc->pos >= sc->source_len) return NULL;
49
+
50
+ OnigRegion *region = onig_region_new();
51
+ const OnigUChar *str = (const OnigUChar *)sc->source;
52
+ const OnigUChar *end = str + sc->source_len;
53
+ const OnigUChar *start = str + sc->pos;
54
+
55
+ /* Match must start at current position */
56
+ int r = onig_match(re, str, end, start, region, ONIG_OPTION_NONE);
57
+
58
+ if (r >= 0) {
59
+ sc->last_pos = sc->pos;
60
+ int64_t match_len = (int64_t)r;
61
+ sc_set_matched(sc, sc->source + sc->pos, match_len);
62
+ sc->pos += match_len;
63
+ onig_region_free(region, 1);
64
+ return sc->matched;
65
+ }
66
+
67
+ onig_region_free(region, 1);
68
+ free(sc->matched);
69
+ sc->matched = NULL;
70
+ sc->matched_len = 0;
71
+ return NULL;
72
+ }
73
+
74
+ /* check(pattern) — match at current position, do NOT advance */
75
+ const char *sp_StringScanner_check(sp_StringScanner *sc, regex_t *re) {
76
+ if (sc->pos >= sc->source_len) return NULL;
77
+
78
+ OnigRegion *region = onig_region_new();
79
+ const OnigUChar *str = (const OnigUChar *)sc->source;
80
+ const OnigUChar *end = str + sc->source_len;
81
+ const OnigUChar *start = str + sc->pos;
82
+
83
+ int r = onig_match(re, str, end, start, region, ONIG_OPTION_NONE);
84
+
85
+ if (r >= 0) {
86
+ sc_set_matched(sc, sc->source + sc->pos, (int64_t)r);
87
+ onig_region_free(region, 1);
88
+ return sc->matched;
89
+ }
90
+
91
+ onig_region_free(region, 1);
92
+ free(sc->matched);
93
+ sc->matched = NULL;
94
+ return NULL;
95
+ }
96
+
97
+ /* scan_until(pattern) — scan forward until pattern matches, return everything up to end of match */
98
+ const char *sp_StringScanner_scan_until(sp_StringScanner *sc, regex_t *re) {
99
+ if (sc->pos >= sc->source_len) return NULL;
100
+
101
+ OnigRegion *region = onig_region_new();
102
+ const OnigUChar *str = (const OnigUChar *)sc->source;
103
+ const OnigUChar *end = str + sc->source_len;
104
+ const OnigUChar *start = str + sc->pos;
105
+
106
+ int r = onig_search(re, str, end, start, end, region, ONIG_OPTION_NONE);
107
+
108
+ if (r >= 0) {
109
+ sc->last_pos = sc->pos;
110
+ int64_t total_len = region->end[0] - sc->pos;
111
+ sc_set_matched(sc, sc->source + sc->pos, total_len);
112
+ sc->pos = region->end[0];
113
+ onig_region_free(region, 1);
114
+ return sc->matched;
115
+ }
116
+
117
+ onig_region_free(region, 1);
118
+ return NULL;
119
+ }
120
+
121
+ /* matched — return last matched string */
122
+ const char *sp_StringScanner_matched(sp_StringScanner *sc) {
123
+ return sc->matched ? sc->matched : "";
124
+ }
125
+
126
+ /* pos — current position */
127
+ int64_t sp_StringScanner_pos(sp_StringScanner *sc) {
128
+ return sc->pos;
129
+ }
130
+
131
+ /* eos? — at end of string? */
132
+ int sp_StringScanner_eos_p(sp_StringScanner *sc) {
133
+ return sc->pos >= sc->source_len;
134
+ }
135
+
136
+ /* getch — get one character and advance */
137
+ const char *sp_StringScanner_getch(sp_StringScanner *sc) {
138
+ if (sc->pos >= sc->source_len) return NULL;
139
+ sc->last_pos = sc->pos;
140
+ char *ch = (char *)malloc(2);
141
+ ch[0] = sc->source[sc->pos];
142
+ ch[1] = '\0';
143
+ free(sc->matched);
144
+ sc->matched = ch;
145
+ sc->matched_len = 1;
146
+ sc->pos++;
147
+ return sc->matched;
148
+ }
149
+
150
+ /* peek(n) — look ahead n characters without advancing */
151
+ const char *sp_StringScanner_peek(sp_StringScanner *sc, int64_t n) {
152
+ if (sc->pos >= sc->source_len) return "";
153
+ int64_t remaining = sc->source_len - sc->pos;
154
+ if (n > remaining) n = remaining;
155
+ char *buf = (char *)malloc(n + 1);
156
+ memcpy(buf, sc->source + sc->pos, n);
157
+ buf[n] = '\0';
158
+ return buf;
159
+ }
160
+
161
+ /* unscan — revert to position before last scan */
162
+ sp_StringScanner *sp_StringScanner_unscan(sp_StringScanner *sc) {
163
+ sc->pos = sc->last_pos;
164
+ return sc;
165
+ }
166
+
167
+ /* rest — remaining string from current position */
168
+ const char *sp_StringScanner_rest(sp_StringScanner *sc) {
169
+ return sc->source + sc->pos;
170
+ }
@@ -0,0 +1,55 @@
1
+ # Spinel lib: strscan
2
+ #
3
+ # StringScanner — sequential string scanning with regexp.
4
+ # Type definitions for Spinel. C implementation in lib/strscan.c.
5
+ #
6
+ # Link with: cc app.c lib/strscan.c -lonig -lm -o app
7
+
8
+ class StringScanner
9
+ def initialize(str)
10
+ @source = str
11
+ @pos = 0
12
+ @matched = ""
13
+ @last_pos = 0
14
+ end
15
+
16
+ def scan(pattern)
17
+ @matched
18
+ end
19
+
20
+ def check(pattern)
21
+ @matched
22
+ end
23
+
24
+ def scan_until(pattern)
25
+ @matched
26
+ end
27
+
28
+ def matched
29
+ @matched
30
+ end
31
+
32
+ def pos
33
+ @pos
34
+ end
35
+
36
+ def eos?
37
+ @pos >= @source.length
38
+ end
39
+
40
+ def getch
41
+ @matched
42
+ end
43
+
44
+ def peek(n)
45
+ @matched
46
+ end
47
+
48
+ def unscan
49
+ self
50
+ end
51
+
52
+ def rest
53
+ @source
54
+ end
55
+ end
@@ -0,0 +1,191 @@
1
+ #!/bin/sh
2
+ # Spinel AOT Compiler - Ruby to native binary
3
+ #
4
+ # Usage:
5
+ # spinel app.rb - compiles to ./app
6
+ # spinel app.rb -o myapp - compiles to ./myapp
7
+ # spinel app.rb -c - generate C only (app.c)
8
+ # spinel app.rb -c -o app.c - generate C to specific file
9
+ # spinel app.rb -S - print C to stdout
10
+ # spinel -e 'puts 42' - compile inline source (default name: a)
11
+ #
12
+ # Options:
13
+ # -o FILE Output file (binary or C depending on -c)
14
+ # -c Generate C source only, don't compile
15
+ # -S Print generated C to stdout
16
+ # -O LEVEL Optimization level for cc (default: 2)
17
+ # --cc=CMD C compiler command (default: cc)
18
+ # -e STR Inline Ruby source (repeatable; multiple -e join with \n)
19
+
20
+ DIR="$(cd "$(dirname "$(readlink -f "$0" 2>/dev/null || realpath "$0" 2>/dev/null || echo "$0")")" && pwd)"
21
+ PARSE_BIN="$DIR/spinel_parse"
22
+ CODEGEN_RB="$DIR/spinel_codegen.rb"
23
+ CODEGEN_BIN="$DIR/spinel_codegen"
24
+
25
+ # On Windows (MSYS2 / Cygwin / MinGW) the compiled binaries carry a .exe
26
+ # suffix; fall back to that when the unsuffixed path is absent.
27
+ case "$(uname -s 2>/dev/null)" in
28
+ MINGW*|MSYS*|CYGWIN*)
29
+ [ ! -x "$PARSE_BIN" ] && [ -x "$PARSE_BIN.exe" ] && PARSE_BIN="$PARSE_BIN.exe"
30
+ [ ! -x "$CODEGEN_BIN" ] && [ -x "$CODEGEN_BIN.exe" ] && CODEGEN_BIN="$CODEGEN_BIN.exe"
31
+ ;;
32
+ esac
33
+
34
+ SOURCE=""
35
+ OUTPUT=""
36
+ C_ONLY=0
37
+ STDOUT_MODE=0
38
+ OPT_LEVEL="2"
39
+ CC_CMD="cc"
40
+ EXTRA_FLAGS=""
41
+ C_TMP=""
42
+ EVAL_SCRIPT=""
43
+ EVAL_USED=0
44
+ EVAL_TMP=""
45
+
46
+ while [ $# -gt 0 ]; do
47
+ case "$1" in
48
+ --source=*) SOURCE="${1#--source=}" ;;
49
+ --output=*) OUTPUT="${1#--output=}" ;;
50
+ --cc=*) CC_CMD="${1#--cc=}" ;;
51
+ -o) shift; OUTPUT="$1" ;;
52
+ -O) shift; OPT_LEVEL="$1" ;;
53
+ -e) shift
54
+ if [ "$EVAL_USED" -eq 0 ]; then
55
+ EVAL_SCRIPT="$1"
56
+ else
57
+ EVAL_SCRIPT="$EVAL_SCRIPT
58
+ $1"
59
+ fi
60
+ EVAL_USED=1 ;;
61
+ -c) C_ONLY=1 ;;
62
+ -S) STDOUT_MODE=1 ;;
63
+ *.rb) [ -z "$SOURCE" ] && SOURCE="$1" ;;
64
+ esac
65
+ shift
66
+ done
67
+
68
+ # `-e` mode: write the accumulated inline script to a temp file and
69
+ # treat it as the source. Default output name is `a` since the
70
+ # inline form has no .rb basename to derive from. If both -e and a
71
+ # .rb file were given, -e wins (consistent with `ruby -e ... script.rb`
72
+ # where the .rb file becomes ARGV — Spinel only consumes the source).
73
+ if [ "$EVAL_USED" -eq 1 ]; then
74
+ EVAL_TMP="$(mktemp /tmp/spinel_eval.XXXXXX).rb"
75
+ printf '%s\n' "$EVAL_SCRIPT" > "$EVAL_TMP"
76
+ SOURCE="$EVAL_TMP"
77
+ fi
78
+
79
+ if [ -z "$SOURCE" ]; then
80
+ echo "Spinel AOT Compiler" >&2
81
+ echo "" >&2
82
+ echo "Usage: spinel app.rb - compile to ./app" >&2
83
+ echo " spinel app.rb -o myapp - compile to ./myapp" >&2
84
+ echo " spinel app.rb -c - generate app.c only" >&2
85
+ echo " spinel app.rb -S - print C to stdout" >&2
86
+ echo " spinel -e 'puts 42' - compile inline source" >&2
87
+ echo "" >&2
88
+ echo "Options:" >&2
89
+ echo " -o FILE Output file" >&2
90
+ echo " -c C source only (don't compile)" >&2
91
+ echo " -S Print C to stdout" >&2
92
+ echo " -O LEVEL Optimization level (default: 2)" >&2
93
+ echo " --cc=CMD C compiler (default: cc)" >&2
94
+ echo " -e STR Inline Ruby source (repeatable; joined with newlines)" >&2
95
+ exit 1
96
+ fi
97
+
98
+ if [ ! -f "$SOURCE" ]; then
99
+ echo "spinel: $SOURCE: No such file" >&2
100
+ exit 1
101
+ fi
102
+
103
+ if [ "$EVAL_USED" -eq 1 ]; then
104
+ BASENAME="a"
105
+ else
106
+ BASENAME="$(basename "$SOURCE" .rb)"
107
+ fi
108
+ AST_TMP="$(mktemp /tmp/spinel_ast.XXXXXX)"
109
+ trap 'rm -f "$AST_TMP" "$C_TMP" "$EVAL_TMP"' EXIT
110
+
111
+ # Step 1: Parse. spinel_parse is C-only; build it via `make parse`
112
+ # (or `make all`) before invoking spinel.
113
+ if [ ! -x "$PARSE_BIN" ]; then
114
+ echo "spinel: parser binary not found at $PARSE_BIN; run 'make parse' or 'make all' first" >&2
115
+ exit 1
116
+ fi
117
+ "$PARSE_BIN" "$SOURCE" "$AST_TMP"
118
+ if [ $? -ne 0 ]; then
119
+ echo "spinel: parse failed" >&2
120
+ exit 1
121
+ fi
122
+
123
+ # Step 2: Codegen
124
+ if [ $STDOUT_MODE -eq 1 ]; then
125
+ if [ -x "$CODEGEN_BIN" ]; then
126
+ "$CODEGEN_BIN" "$AST_TMP"
127
+ else
128
+ ruby "$CODEGEN_RB" "$AST_TMP"
129
+ fi
130
+ exit $?
131
+ fi
132
+
133
+ if [ $C_ONLY -eq 1 ]; then
134
+ C_FILE="${OUTPUT:-$BASENAME.c}"
135
+ else
136
+ C_TMP="$(mktemp /tmp/spinel_out.XXXXXX.c)"
137
+ C_FILE="$C_TMP"
138
+ fi
139
+
140
+ if [ -x "$CODEGEN_BIN" ]; then
141
+ "$CODEGEN_BIN" "$AST_TMP" "$C_FILE"
142
+ else
143
+ ruby "$CODEGEN_RB" "$AST_TMP" "$C_FILE"
144
+ fi
145
+ if [ $? -ne 0 ]; then
146
+ echo "spinel: codegen failed" >&2
147
+ exit 1
148
+ fi
149
+
150
+ if [ $C_ONLY -eq 1 ]; then
151
+ echo "Wrote $C_FILE" >&2
152
+ exit 0
153
+ fi
154
+
155
+ # Step 3: Compile C -> binary
156
+ BIN_FILE="${OUTPUT:-$BASENAME}"
157
+ # Runtime library (bigint + regexp)
158
+ SP_RT_LIB="$DIR/lib/libspinel_rt.a"
159
+ INCLUDE_FLAGS="-I$DIR/lib"
160
+ if [ -f "$SP_RT_LIB" ]; then
161
+ EXTRA_FLAGS="$EXTRA_FLAGS $SP_RT_LIB"
162
+ fi
163
+ # Legacy: optional standalone regexp lib (retained for backward compat)
164
+ RE_LIB="$DIR/lib/regexp/libspre.a"
165
+ if grep -q 're_compile' "$C_FILE" 2>/dev/null && [ ! -f "$SP_RT_LIB" ] && [ -f "$RE_LIB" ]; then
166
+ EXTRA_FLAGS="$EXTRA_FLAGS $RE_LIB"
167
+ fi
168
+ INCLUDE_FLAGS="$INCLUDE_FLAGS -I$DIR/lib/regexp"
169
+ # Scrape FFI link/cflag markers emitted by the codegen. Each line looks
170
+ # like "/* SPINEL_LINK: -lraylib */" or "/* SPINEL_CFLAGS: -I/foo */"
171
+ # and comes from an ffi_lib / ffi_cflags declaration.
172
+ FFI_LINKS=$(sed -n 's|^/\* SPINEL_LINK: \(.*\) \*/$|\1|p' "$C_FILE" | tr '\n' ' ')
173
+ FFI_CFLAGS=$(sed -n 's|^/\* SPINEL_CFLAGS: \(.*\) \*/$|\1|p' "$C_FILE" | tr '\n' ' ')
174
+ if [ "$(uname -s)" = "Darwin" ]; then
175
+ GC_FLAG="-Wl,-dead_strip"
176
+ else
177
+ GC_FLAG="-Wl,--gc-sections"
178
+ fi
179
+
180
+ # MinGW's default 1MB stack overflows on nontrivial programs; reserve 64MB.
181
+ case "$(uname -s 2>/dev/null)" in
182
+ MINGW*|MSYS*|CYGWIN*) EXTRA_FLAGS="$EXTRA_FLAGS -Wl,--stack,67108864" ;;
183
+ esac
184
+
185
+ $CC_CMD -O${OPT_LEVEL} -Wno-all -ffunction-sections -fdata-sections $INCLUDE_FLAGS $FFI_CFLAGS "$C_FILE" -lm $EXTRA_FLAGS $FFI_LINKS $GC_FLAG -o "$BIN_FILE"
186
+ if [ $? -ne 0 ]; then
187
+ echo "spinel: C compilation failed" >&2
188
+ exit 1
189
+ fi
190
+
191
+ echo "$SOURCE -> $BIN_FILE" >&2