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.
- checksums.yaml +7 -0
- data/.gitmodules +3 -0
- data/CHANGELOG.md +9 -0
- data/LICENSE.txt +21 -0
- data/README.md +72 -0
- data/Rakefile +12 -0
- data/bin/rubyduino +186 -0
- data/examples/hello.rb +9 -0
- data/lib/rubyduino/arduino_entry.c +9 -0
- data/lib/rubyduino/sp_runtime.h +159 -0
- data/lib/rubyduino/spinel.rb +8 -0
- data/lib/rubyduino/spinel_arduino_codegen.rb +129 -0
- data/lib/rubyduino/version.rb +5 -0
- data/lib/rubyduino.rb +9 -0
- data/sig/rubyduino.rbs +4 -0
- data/vendor/spinel/AUTHORS +1 -0
- data/vendor/spinel/LICENSE +19 -0
- data/vendor/spinel/Makefile +406 -0
- data/vendor/spinel/POLY-AS-SET.md +217 -0
- data/vendor/spinel/README.md +409 -0
- data/vendor/spinel/benchmark/bm_ackermann.rb +12 -0
- data/vendor/spinel/benchmark/bm_ao_render.rb +323 -0
- data/vendor/spinel/benchmark/bm_attr_accessor.rb +41 -0
- data/vendor/spinel/benchmark/bm_bigint_fib.rb +10 -0
- data/vendor/spinel/benchmark/bm_binary_trees.rb +53 -0
- data/vendor/spinel/benchmark/bm_csv_process.rb +58 -0
- data/vendor/spinel/benchmark/bm_fannkuch.rb +88 -0
- data/vendor/spinel/benchmark/bm_fasta.rb +87 -0
- data/vendor/spinel/benchmark/bm_fib.rb +9 -0
- data/vendor/spinel/benchmark/bm_gcbench.rb +73 -0
- data/vendor/spinel/benchmark/bm_getivar.rb +34 -0
- data/vendor/spinel/benchmark/bm_getivar_module.rb +34 -0
- data/vendor/spinel/benchmark/bm_huffman.rb +141 -0
- data/vendor/spinel/benchmark/bm_inline.rb +68 -0
- data/vendor/spinel/benchmark/bm_io_wordcount.rb +57 -0
- data/vendor/spinel/benchmark/bm_json_parse.rb +157 -0
- data/vendor/spinel/benchmark/bm_keyword_args.rb +23 -0
- data/vendor/spinel/benchmark/bm_life.rb +70 -0
- data/vendor/spinel/benchmark/bm_linked_list.rb +75 -0
- data/vendor/spinel/benchmark/bm_loops_times.rb +16 -0
- data/vendor/spinel/benchmark/bm_mandel_term.rb +34 -0
- data/vendor/spinel/benchmark/bm_matmul.rb +42 -0
- data/vendor/spinel/benchmark/bm_nbody.rb +115 -0
- data/vendor/spinel/benchmark/bm_nested_loop.rb +29 -0
- data/vendor/spinel/benchmark/bm_nqueens.rb +46 -0
- data/vendor/spinel/benchmark/bm_object_new.rb +21 -0
- data/vendor/spinel/benchmark/bm_object_new_init.rb +21 -0
- data/vendor/spinel/benchmark/bm_object_new_no_escape.rb +28 -0
- data/vendor/spinel/benchmark/bm_partial_sums.rb +38 -0
- data/vendor/spinel/benchmark/bm_pidigits.rb +31 -0
- data/vendor/spinel/benchmark/bm_rbtree.rb +100 -0
- data/vendor/spinel/benchmark/bm_ruby_xor.rb +28 -0
- data/vendor/spinel/benchmark/bm_send_bmethod.rb +31 -0
- data/vendor/spinel/benchmark/bm_send_cfunc_block.rb +18 -0
- data/vendor/spinel/benchmark/bm_send_rubyfunc_block.rb +23 -0
- data/vendor/spinel/benchmark/bm_setivar.rb +33 -0
- data/vendor/spinel/benchmark/bm_setivar_object.rb +33 -0
- data/vendor/spinel/benchmark/bm_setivar_young.rb +37 -0
- data/vendor/spinel/benchmark/bm_sieve.rb +23 -0
- data/vendor/spinel/benchmark/bm_so_lists.rb +47 -0
- data/vendor/spinel/benchmark/bm_so_mandelbrot.rb +65 -0
- data/vendor/spinel/benchmark/bm_spectral_norm.rb +71 -0
- data/vendor/spinel/benchmark/bm_splay.rb +128 -0
- data/vendor/spinel/benchmark/bm_str_concat.rb +15 -0
- data/vendor/spinel/benchmark/bm_structaref.rb +25 -0
- data/vendor/spinel/benchmark/bm_structaset.rb +24 -0
- data/vendor/spinel/benchmark/bm_sudoku.rb +217 -0
- data/vendor/spinel/benchmark/bm_tak.rb +10 -0
- data/vendor/spinel/benchmark/bm_tarai.rb +10 -0
- data/vendor/spinel/benchmark/bm_template.rb +50 -0
- data/vendor/spinel/benchmark/bm_throw.rb +25 -0
- data/vendor/spinel/benchmark/bm_wordfreq.rb +43 -0
- data/vendor/spinel/docs/FFI.md +198 -0
- data/vendor/spinel/examples/ffi/libm/README.md +24 -0
- data/vendor/spinel/examples/ffi/libm/libm.rb +17 -0
- data/vendor/spinel/examples/ffi/sqlite/README.md +73 -0
- data/vendor/spinel/examples/ffi/sqlite/blog.rb +185 -0
- data/vendor/spinel/examples/ffi/sqlite/sqlite3_lib.rb +46 -0
- data/vendor/spinel/lib/erb.rb +19 -0
- data/vendor/spinel/lib/forwardable.rb +8 -0
- data/vendor/spinel/lib/mruby_shim.h +118 -0
- data/vendor/spinel/lib/optparse.rb +123 -0
- data/vendor/spinel/lib/regexp/re_compile.c +979 -0
- data/vendor/spinel/lib/regexp/re_exec.c +665 -0
- data/vendor/spinel/lib/regexp/re_internal.h +146 -0
- data/vendor/spinel/lib/regexp/re_utf8.c +76 -0
- data/vendor/spinel/lib/set.rb +12 -0
- data/vendor/spinel/lib/sp_bigint.c +5400 -0
- data/vendor/spinel/lib/sp_bigint.h +117 -0
- data/vendor/spinel/lib/sp_runtime.h +1361 -0
- data/vendor/spinel/lib/stringio.c +286 -0
- data/vendor/spinel/lib/stringio.rb +5 -0
- data/vendor/spinel/lib/strscan.c +170 -0
- data/vendor/spinel/lib/strscan.rb +55 -0
- data/vendor/spinel/spinel +191 -0
- data/vendor/spinel/spinel.bat +158 -0
- data/vendor/spinel/spinel_codegen.rb +39906 -0
- data/vendor/spinel/spinel_parse +0 -0
- data/vendor/spinel/spinel_parse.c +1586 -0
- data/vendor/spinel/test/alias_global.rb +16 -0
- data/vendor/spinel/test/alias_global.rb.expected +3 -0
- data/vendor/spinel/test/alias_method.rb +28 -0
- data/vendor/spinel/test/alias_method.rb.expected +5 -0
- data/vendor/spinel/test/and_node_poly_operand.rb +24 -0
- data/vendor/spinel/test/anon_block_forward.rb +47 -0
- data/vendor/spinel/test/anon_block_forward.rb.expected +4 -0
- data/vendor/spinel/test/array_3d_nested.rb +48 -0
- data/vendor/spinel/test/array_clear_typed.rb +40 -0
- data/vendor/spinel/test/array_clear_typed.rb.expected +7 -0
- data/vendor/spinel/test/array_concat.rb +18 -0
- data/vendor/spinel/test/array_concat.rb.expected +2 -0
- data/vendor/spinel/test/array_each_with_object.rb +17 -0
- data/vendor/spinel/test/array_each_with_object.rb.expected +2 -0
- data/vendor/spinel/test/array_fill_poly.rb +17 -0
- data/vendor/spinel/test/array_flat_map.rb +16 -0
- data/vendor/spinel/test/array_flat_map.rb.expected +2 -0
- data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb +29 -0
- data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb.expected +6 -0
- data/vendor/spinel/test/array_method_name_clash.rb +15 -0
- data/vendor/spinel/test/array_method_name_clash.rb.expected +1 -0
- data/vendor/spinel/test/array_new_block_typed_container.rb +37 -0
- data/vendor/spinel/test/array_new_block_typed_container.rb.expected +7 -0
- data/vendor/spinel/test/array_new_empty_inner_deferred.rb +47 -0
- data/vendor/spinel/test/array_new_empty_inner_deferred.rb.expected +8 -0
- data/vendor/spinel/test/array_partition_gc.rb +20 -0
- data/vendor/spinel/test/array_partition_gc.rb.expected +3 -0
- data/vendor/spinel/test/array_plus.rb +18 -0
- data/vendor/spinel/test/array_plus.rb.expected +2 -0
- data/vendor/spinel/test/array_rotate_bang.rb +54 -0
- data/vendor/spinel/test/array_rotate_bang.rb.expected +34 -0
- data/vendor/spinel/test/array_shuffle_ptr.rb +11 -0
- data/vendor/spinel/test/array_shuffle_ptr.rb.expected +1 -0
- data/vendor/spinel/test/array_slice_bang.rb +81 -0
- data/vendor/spinel/test/array_slice_bang.rb.expected +40 -0
- data/vendor/spinel/test/attr.rb +77 -0
- data/vendor/spinel/test/attr.rb.expected +9 -0
- data/vendor/spinel/test/attr_writer_poly_box.rb +24 -0
- data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb +29 -0
- data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb.expected +3 -0
- data/vendor/spinel/test/attr_writer_returns_rhs.rb +23 -0
- data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb +38 -0
- data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb.expected +3 -0
- data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb +36 -0
- data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb.expected +2 -0
- data/vendor/spinel/test/back_ref.rb +21 -0
- data/vendor/spinel/test/back_ref.rb.expected +6 -0
- data/vendor/spinel/test/bare_return_in_cls_method.rb +46 -0
- data/vendor/spinel/test/bare_return_in_cls_method.rb.expected +2 -0
- data/vendor/spinel/test/bare_return_in_initialize.rb +55 -0
- data/vendor/spinel/test/bare_return_in_initialize.rb.expected +4 -0
- data/vendor/spinel/test/bare_return_in_poly_method.rb +26 -0
- data/vendor/spinel/test/bare_return_in_poly_method.rb.expected +2 -0
- data/vendor/spinel/test/bigint_div_by_zero.rb +43 -0
- data/vendor/spinel/test/bigint_div_by_zero.rb.expected +3 -0
- data/vendor/spinel/test/block2.rb +31 -0
- data/vendor/spinel/test/block2.rb.expected +4 -0
- data/vendor/spinel/test/block_forward_block_arg.rb +60 -0
- data/vendor/spinel/test/block_forward_block_arg.rb.expected +4 -0
- data/vendor/spinel/test/block_forward_recv_typed.rb +82 -0
- data/vendor/spinel/test/block_forward_recv_typed.rb.expected +11 -0
- data/vendor/spinel/test/block_forward_self_call.rb +61 -0
- data/vendor/spinel/test/block_forward_self_call.rb.expected +6 -0
- data/vendor/spinel/test/block_given_block_param.rb +46 -0
- data/vendor/spinel/test/block_given_block_param.rb.expected +3 -0
- data/vendor/spinel/test/block_param_shadow.rb +246 -0
- data/vendor/spinel/test/block_param_shadow.rb.expected +71 -0
- data/vendor/spinel/test/bm_instance_eval.rb +209 -0
- data/vendor/spinel/test/bm_instance_eval.rb.expected +27 -0
- data/vendor/spinel/test/bound_method_array.rb +22 -0
- data/vendor/spinel/test/bound_method_array.rb.expected +4 -0
- data/vendor/spinel/test/bound_method_basic.rb +27 -0
- data/vendor/spinel/test/bound_method_basic.rb.expected +2 -0
- data/vendor/spinel/test/bound_method_gc.rb +30 -0
- data/vendor/spinel/test/bound_method_gc.rb.expected +1 -0
- data/vendor/spinel/test/bound_method_obj_recv.rb +41 -0
- data/vendor/spinel/test/bound_method_obj_recv.rb.expected +4 -0
- data/vendor/spinel/test/bound_method_single_eval.rb +37 -0
- data/vendor/spinel/test/bound_method_single_eval.rb.expected +4 -0
- data/vendor/spinel/test/box_pointer_to_poly.rb +27 -0
- data/vendor/spinel/test/box_pointer_to_poly.rb.expected +1 -0
- data/vendor/spinel/test/box_unbox_local_assign_cond.rb +22 -0
- data/vendor/spinel/test/box_unbox_local_assign_cond.rb.expected +2 -0
- data/vendor/spinel/test/bundle_array_a.rb +400 -0
- data/vendor/spinel/test/bundle_array_a.rb.expected +117 -0
- data/vendor/spinel/test/bundle_array_b.rb +369 -0
- data/vendor/spinel/test/bundle_array_b.rb.expected +136 -0
- data/vendor/spinel/test/bundle_array_c.rb +146 -0
- data/vendor/spinel/test/bundle_array_c.rb.expected +51 -0
- data/vendor/spinel/test/bundle_array_d.rb +181 -0
- data/vendor/spinel/test/bundle_array_d.rb.expected +66 -0
- data/vendor/spinel/test/bundle_hash.rb +328 -0
- data/vendor/spinel/test/bundle_hash.rb.expected +104 -0
- data/vendor/spinel/test/bundle_int_array.rb +125 -0
- data/vendor/spinel/test/bundle_int_array.rb.expected +24 -0
- data/vendor/spinel/test/bundle_integer.rb +248 -0
- data/vendor/spinel/test/bundle_integer.rb.expected +113 -0
- data/vendor/spinel/test/bundle_io_sys.rb +223 -0
- data/vendor/spinel/test/bundle_io_sys.rb.expected +62 -0
- data/vendor/spinel/test/bundle_misc_a.rb +462 -0
- data/vendor/spinel/test/bundle_misc_a.rb.expected +208 -0
- data/vendor/spinel/test/bundle_misc_b.rb +401 -0
- data/vendor/spinel/test/bundle_misc_b.rb.expected +120 -0
- data/vendor/spinel/test/bundle_poly.rb +145 -0
- data/vendor/spinel/test/bundle_poly.rb.expected +66 -0
- data/vendor/spinel/test/bundle_string_a.rb +278 -0
- data/vendor/spinel/test/bundle_string_a.rb.expected +93 -0
- data/vendor/spinel/test/bundle_string_b.rb +226 -0
- data/vendor/spinel/test/bundle_string_b.rb.expected +83 -0
- data/vendor/spinel/test/bundle_sym.rb +302 -0
- data/vendor/spinel/test/bundle_sym.rb.expected +117 -0
- data/vendor/spinel/test/call_and_write.rb +28 -0
- data/vendor/spinel/test/call_and_write.rb.expected +3 -0
- data/vendor/spinel/test/call_arg_int_to_obj_cast.rb +55 -0
- data/vendor/spinel/test/call_arg_int_to_obj_cast.rb.expected +1 -0
- data/vendor/spinel/test/call_op_write.rb +51 -0
- data/vendor/spinel/test/call_op_write.rb.expected +11 -0
- data/vendor/spinel/test/call_or_write.rb +35 -0
- data/vendor/spinel/test/call_or_write.rb.expected +3 -0
- data/vendor/spinel/test/case.rb +43 -0
- data/vendor/spinel/test/case.rb.expected +10 -0
- data/vendor/spinel/test/case_string_when_sym_no_match.rb +59 -0
- data/vendor/spinel/test/case_string_when_sym_no_match.rb.expected +7 -0
- data/vendor/spinel/test/case_when_class.rb +70 -0
- data/vendor/spinel/test/case_when_class.rb.expected +5 -0
- data/vendor/spinel/test/chained_attr_setter.rb +55 -0
- data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb +28 -0
- data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb.expected +3 -0
- data/vendor/spinel/test/chained_ivar_write_call_rhs.rb +30 -0
- data/vendor/spinel/test/chained_ivar_write_call_rhs.rb.expected +2 -0
- data/vendor/spinel/test/chained_ivar_write_split.rb +26 -0
- data/vendor/spinel/test/chained_ivar_write_split.rb.expected +3 -0
- data/vendor/spinel/test/chained_ivar_write_subclass.rb +26 -0
- data/vendor/spinel/test/chained_ivar_write_subclass.rb.expected +2 -0
- data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb +32 -0
- data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb.expected +3 -0
- data/vendor/spinel/test/chained_or_assign_collection_element.rb +29 -0
- data/vendor/spinel/test/chained_or_assign_collection_element.rb.expected +2 -0
- data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb +25 -0
- data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb.expected +3 -0
- data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb +24 -0
- data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb.expected +3 -0
- data/vendor/spinel/test/class_constant_path_read.rb +26 -0
- data/vendor/spinel/test/class_constant_path_read.rb.expected +4 -0
- data/vendor/spinel/test/class_constant_sym_array.rb +19 -0
- data/vendor/spinel/test/class_constant_sym_array.rb.expected +4 -0
- data/vendor/spinel/test/class_def_order.rb +66 -0
- data/vendor/spinel/test/class_def_order.rb.expected +4 -0
- data/vendor/spinel/test/class_method_open_class_call.rb +31 -0
- data/vendor/spinel/test/class_method_open_class_call.rb.expected +3 -0
- data/vendor/spinel/test/class_var_read.rb +113 -0
- data/vendor/spinel/test/class_var_read.rb.expected +8 -0
- data/vendor/spinel/test/class_var_write.rb +19 -0
- data/vendor/spinel/test/class_var_write.rb.expected +1 -0
- data/vendor/spinel/test/cls_ivar_type_parent_defer.rb +32 -0
- data/vendor/spinel/test/cls_method_object.rb +31 -0
- data/vendor/spinel/test/cls_method_object.rb.expected +2 -0
- data/vendor/spinel/test/codegen_class_in_module_with_explicit_parent.rb +15 -0
- data/vendor/spinel/test/codegen_class_in_module_with_explicit_parent.rb.expected +1 -0
- data/vendor/spinel/test/codegen_const_lookup_in_toplevel_method.rb +13 -0
- data/vendor/spinel/test/codegen_const_lookup_in_toplevel_method.rb.expected +1 -0
- data/vendor/spinel/test/comparable.rb +21 -0
- data/vendor/spinel/test/comparable.rb.expected +5 -0
- data/vendor/spinel/test/const_init_block_param_scan.rb +13 -0
- data/vendor/spinel/test/const_init_block_param_scan.rb.expected +2 -0
- data/vendor/spinel/test/constant_path.rb +102 -0
- data/vendor/spinel/test/constant_path.rb.expected +21 -0
- data/vendor/spinel/test/constants.rb +44 -0
- data/vendor/spinel/test/constants.rb.expected +13 -0
- data/vendor/spinel/test/control.rb +23 -0
- data/vendor/spinel/test/control.rb.expected +7 -0
- data/vendor/spinel/test/default_args.rb +108 -0
- data/vendor/spinel/test/default_args.rb.expected +13 -0
- data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb +32 -0
- data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb.expected +1 -0
- data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb +43 -0
- data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb.expected +2 -0
- data/vendor/spinel/test/each_with_object_seed_shadow.rb +14 -0
- data/vendor/spinel/test/each_with_object_seed_shadow.rb.expected +4 -0
- data/vendor/spinel/test/elsif_isa_chain.rb +56 -0
- data/vendor/spinel/test/elsif_isa_chain.rb.expected +6 -0
- data/vendor/spinel/test/embedded_var.rb +17 -0
- data/vendor/spinel/test/embedded_var.rb.expected +2 -0
- data/vendor/spinel/test/empty_array_param.rb +94 -0
- data/vendor/spinel/test/empty_array_param.rb.expected +18 -0
- data/vendor/spinel/test/empty_hash_ivar_string_value.rb +51 -0
- data/vendor/spinel/test/empty_hash_ivar_string_value.rb.expected +4 -0
- data/vendor/spinel/test/endless_method.rb +61 -0
- data/vendor/spinel/test/endless_method.rb.expected +11 -0
- data/vendor/spinel/test/endless_method_rescue.rb +33 -0
- data/vendor/spinel/test/endless_method_rescue.rb.expected +10 -0
- data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb +19 -0
- data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb.expected +1 -0
- data/vendor/spinel/test/ensure_runs_on_raise.rb +32 -0
- data/vendor/spinel/test/ensure_runs_on_raise.rb.expected +3 -0
- data/vendor/spinel/test/ensure_runs_on_raise_nested.rb +38 -0
- data/vendor/spinel/test/ensure_runs_on_raise_nested.rb.expected +4 -0
- data/vendor/spinel/test/ensure_runs_on_return.rb +61 -0
- data/vendor/spinel/test/ensure_runs_on_return.rb.expected +6 -0
- data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb +26 -0
- data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb.expected +2 -0
- data/vendor/spinel/test/ensure_runs_on_return_nested.rb +37 -0
- data/vendor/spinel/test/ensure_runs_on_return_nested.rb.expected +3 -0
- data/vendor/spinel/test/enumerable.rb +19 -0
- data/vendor/spinel/test/enumerable.rb.expected +2 -0
- data/vendor/spinel/test/env_string_inference.rb +37 -0
- data/vendor/spinel/test/env_string_inference.rb.expected +6 -0
- data/vendor/spinel/test/exception_object_methods.rb +99 -0
- data/vendor/spinel/test/exception_object_methods.rb.expected +15 -0
- data/vendor/spinel/test/exceptions.rb +34 -0
- data/vendor/spinel/test/exceptions.rb.expected +4 -0
- data/vendor/spinel/test/features.rb +32 -0
- data/vendor/spinel/test/features.rb.expected +9 -0
- data/vendor/spinel/test/ffi_buffer_reader.rb +23 -0
- data/vendor/spinel/test/ffi_buffer_reader.rb.expected +5 -0
- data/vendor/spinel/test/ffi_const.rb +12 -0
- data/vendor/spinel/test/ffi_const.rb.expected +5 -0
- data/vendor/spinel/test/ffi_libc_libm_basic.rb +16 -0
- data/vendor/spinel/test/ffi_libc_libm_basic.rb.expected +5 -0
- data/vendor/spinel/test/ffi_ptr_nil.rb +27 -0
- data/vendor/spinel/test/ffi_ptr_nil.rb.expected +2 -0
- data/vendor/spinel/test/ffi_void_return.rb +14 -0
- data/vendor/spinel/test/ffi_void_return.rb.expected +2 -0
- data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb +22 -0
- data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb.expected +3 -0
- data/vendor/spinel/test/fiber_yield_across_method_call.rb +28 -0
- data/vendor/spinel/test/fiber_yield_across_method_call.rb.expected +3 -0
- data/vendor/spinel/test/file_basename_gc.rb +59 -0
- data/vendor/spinel/test/file_basename_gc.rb.expected +2 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init.rb +36 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb +32 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb +41 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_int_array.rb +26 -0
- data/vendor/spinel/test/forward_call_class_method_int_array.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_nested.rb +35 -0
- data/vendor/spinel/test/forward_call_class_method_nested.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_obj.rb +36 -0
- data/vendor/spinel/test/forward_call_class_method_obj.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_param_type_inference.rb +23 -0
- data/vendor/spinel/test/forward_call_param_type_inference.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_param_type_int_array.rb +34 -0
- data/vendor/spinel/test/forward_call_param_type_int_array.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_param_type_obj.rb +38 -0
- data/vendor/spinel/test/forward_call_param_type_obj.rb.expected +1 -0
- data/vendor/spinel/test/gc_root_ptr_array_literal.rb +63 -0
- data/vendor/spinel/test/gc_root_ptr_array_literal.rb.expected +1 -0
- data/vendor/spinel/test/gc_save_double_in_new.rb +13 -0
- data/vendor/spinel/test/gc_save_double_in_new.rb.expected +1 -0
- data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb +54 -0
- data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb.expected +2 -0
- data/vendor/spinel/test/global_var.rb +53 -0
- data/vendor/spinel/test/global_var.rb.expected +12 -0
- data/vendor/spinel/test/gvar.rb +22 -0
- data/vendor/spinel/test/gvar.rb.expected +4 -0
- data/vendor/spinel/test/hash_dig.rb +92 -0
- data/vendor/spinel/test/hash_dig.rb.expected +37 -0
- data/vendor/spinel/test/hash_keys_each_shadow.rb +40 -0
- data/vendor/spinel/test/hash_keys_each_shadow.rb.expected +9 -0
- data/vendor/spinel/test/hash_shorthand.rb +37 -0
- data/vendor/spinel/test/hash_shorthand.rb.expected +6 -0
- data/vendor/spinel/test/hash_shorthand_str.rb +48 -0
- data/vendor/spinel/test/hash_shorthand_str.rb.expected +19 -0
- data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb +46 -0
- data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb.expected +2 -0
- data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb +50 -0
- data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb.expected +3 -0
- data/vendor/spinel/test/implicit_self_param_poly.rb +17 -0
- data/vendor/spinel/test/implicit_self_param_poly.rb.expected +1 -0
- data/vendor/spinel/test/index_write.rb +106 -0
- data/vendor/spinel/test/index_write.rb.expected +30 -0
- data/vendor/spinel/test/inference_method_set.rb +35 -0
- data/vendor/spinel/test/inference_method_set.rb.expected +2 -0
- data/vendor/spinel/test/inherit.rb +52 -0
- data/vendor/spinel/test/inherit.rb.expected +7 -0
- data/vendor/spinel/test/inherited_method_param_widen.rb +49 -0
- data/vendor/spinel/test/inherited_method_param_widen.rb.expected +1 -0
- data/vendor/spinel/test/init_locals.rb +43 -0
- data/vendor/spinel/test/init_locals.rb.expected +3 -0
- data/vendor/spinel/test/initialize_param_poly_call_sites.rb +20 -0
- data/vendor/spinel/test/initialize_param_poly_call_sites.rb.expected +2 -0
- data/vendor/spinel/test/initialize_param_through_call.rb +15 -0
- data/vendor/spinel/test/initialize_param_through_call.rb.expected +1 -0
- data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb +40 -0
- data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb.expected +1 -0
- data/vendor/spinel/test/inspect.rb +86 -0
- data/vendor/spinel/test/inspect.rb.expected +52 -0
- data/vendor/spinel/test/instance_eval_trampoline.rb +88 -0
- data/vendor/spinel/test/instance_eval_trampoline.rb.expected +5 -0
- data/vendor/spinel/test/int_bracket_skip_sym_idx.rb +40 -0
- data/vendor/spinel/test/int_bracket_skip_sym_idx.rb.expected +5 -0
- data/vendor/spinel/test/int_keyed_hash_lookup_as_array.rb +19 -0
- data/vendor/spinel/test/int_keyed_hash_lookup_as_array.rb.expected +2 -0
- data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb +25 -0
- data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb.expected +1 -0
- data/vendor/spinel/test/integer_div.rb +21 -0
- data/vendor/spinel/test/integer_div.rb.expected +10 -0
- data/vendor/spinel/test/integer_div_by_zero.rb +80 -0
- data/vendor/spinel/test/integer_div_by_zero.rb.expected +10 -0
- data/vendor/spinel/test/interp_method_widening.rb +39 -0
- data/vendor/spinel/test/interp_method_widening.rb.expected +4 -0
- data/vendor/spinel/test/interp_symbol.rb +18 -0
- data/vendor/spinel/test/interp_symbol.rb.expected +3 -0
- data/vendor/spinel/test/introspect.rb +35 -0
- data/vendor/spinel/test/introspect.rb.expected +11 -0
- data/vendor/spinel/test/issue176_empty_hash_default.rb +34 -0
- data/vendor/spinel/test/issue176_empty_hash_default.rb.expected +3 -0
- data/vendor/spinel/test/issue203_string_new.rb +27 -0
- data/vendor/spinel/test/issue203_string_new.rb.expected +4 -0
- data/vendor/spinel/test/issue204_user_find_fetch.rb +25 -0
- data/vendor/spinel/test/issue204_user_find_fetch.rb.expected +5 -0
- data/vendor/spinel/test/issue207_factory_pattern.rb +35 -0
- data/vendor/spinel/test/issue207_factory_pattern.rb.expected +1 -0
- data/vendor/spinel/test/issue207_full_repro.rb +52 -0
- data/vendor/spinel/test/issue207_full_repro.rb.expected +1 -0
- data/vendor/spinel/test/issue208_inherited_class_method.rb +24 -0
- data/vendor/spinel/test/issue208_inherited_class_method.rb.expected +4 -0
- data/vendor/spinel/test/issue219_aref_chain.rb +36 -0
- data/vendor/spinel/test/issue219_aref_chain.rb.expected +5 -0
- data/vendor/spinel/test/issue224_bare_new_inherited.rb +66 -0
- data/vendor/spinel/test/issue224_bare_new_inherited.rb.expected +4 -0
- data/vendor/spinel/test/issue229_uncalled_cls_method.rb +76 -0
- data/vendor/spinel/test/issue229_uncalled_cls_method.rb.expected +3 -0
- data/vendor/spinel/test/issue235_chain_tail_widening.rb +48 -0
- data/vendor/spinel/test/issue235_chain_tail_widening.rb.expected +5 -0
- data/vendor/spinel/test/issue236_chain_empty_literal.rb +84 -0
- data/vendor/spinel/test/issue236_chain_empty_literal.rb.expected +7 -0
- data/vendor/spinel/test/issue239_cls_method_default_args.rb +41 -0
- data/vendor/spinel/test/issue239_cls_method_default_args.rb.expected +5 -0
- data/vendor/spinel/test/issue_266_def_length_inference.rb +63 -0
- data/vendor/spinel/test/issue_266_def_length_inference.rb.expected +1 -0
- data/vendor/spinel/test/ivar_and_write_basic.rb +34 -0
- data/vendor/spinel/test/ivar_and_write_basic.rb.expected +5 -0
- data/vendor/spinel/test/ivar_c_keyword.rb +14 -0
- data/vendor/spinel/test/ivar_c_keyword.rb.expected +1 -0
- data/vendor/spinel/test/ivar_float_array.rb +59 -0
- data/vendor/spinel/test/ivar_float_array.rb.expected +11 -0
- data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb +22 -0
- data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb.expected +6 -0
- data/vendor/spinel/test/ivar_or_write_basic.rb +57 -0
- data/vendor/spinel/test/ivar_or_write_basic.rb.expected +9 -0
- data/vendor/spinel/test/ivar_polymorphic.rb +87 -0
- data/vendor/spinel/test/ivar_polymorphic.rb.expected +12 -0
- data/vendor/spinel/test/ivar_ternary_mixed.rb +108 -0
- data/vendor/spinel/test/ivar_ternary_mixed.rb.expected +15 -0
- data/vendor/spinel/test/ivar_writer_heterogeneity.rb +34 -0
- data/vendor/spinel/test/ivar_writer_heterogeneity.rb.expected +2 -0
- data/vendor/spinel/test/known_constants.rb +25 -0
- data/vendor/spinel/test/known_constants.rb.expected +4 -0
- data/vendor/spinel/test/kw_nil_default_string_call.rb +6 -0
- data/vendor/spinel/test/kw_nil_default_string_call.rb.expected +2 -0
- data/vendor/spinel/test/kwargs.rb +21 -0
- data/vendor/spinel/test/kwargs.rb.expected +6 -0
- data/vendor/spinel/test/kwargs_param.rb +26 -0
- data/vendor/spinel/test/kwargs_param.rb.expected +2 -0
- data/vendor/spinel/test/kwargs_param_widen.rb +73 -0
- data/vendor/spinel/test/kwargs_param_widen.rb.expected +3 -0
- data/vendor/spinel/test/lrama_features.rb +142 -0
- data/vendor/spinel/test/lrama_features.rb.expected +38 -0
- data/vendor/spinel/test/map_array_block_result.rb +29 -0
- data/vendor/spinel/test/map_array_block_result.rb.expected +2 -0
- data/vendor/spinel/test/map_block_returns_nested_array.rb +53 -0
- data/vendor/spinel/test/map_empty_block.rb +26 -0
- data/vendor/spinel/test/map_empty_block.rb.expected +6 -0
- data/vendor/spinel/test/map_range_recv_array_block.rb +31 -0
- data/vendor/spinel/test/mega.rb +35 -0
- data/vendor/spinel/test/mega.rb.expected +7 -0
- data/vendor/spinel/test/method.rb +21 -0
- data/vendor/spinel/test/method.rb.expected +6 -0
- data/vendor/spinel/test/method_defined.rb +36 -0
- data/vendor/spinel/test/method_defined.rb.expected +17 -0
- data/vendor/spinel/test/method_dispatch_poly_array.rb +35 -0
- data/vendor/spinel/test/method_dispatch_poly_array.rb.expected +2 -0
- data/vendor/spinel/test/method_introspection.rb +24 -0
- data/vendor/spinel/test/method_introspection.rb.expected +6 -0
- data/vendor/spinel/test/method_param_unify_to_poly.rb +40 -0
- data/vendor/spinel/test/method_param_unify_to_poly.rb.expected +2 -0
- data/vendor/spinel/test/misc.rb +49 -0
- data/vendor/spinel/test/misc.rb.expected +7 -0
- data/vendor/spinel/test/mixin.rb +54 -0
- data/vendor/spinel/test/mixin.rb.expected +4 -0
- data/vendor/spinel/test/module_acc_dispatch_param_box.rb +46 -0
- data/vendor/spinel/test/module_acc_dispatch_param_box.rb.expected +2 -0
- data/vendor/spinel/test/module_class_new.rb +17 -0
- data/vendor/spinel/test/module_class_new.rb.expected +3 -0
- data/vendor/spinel/test/module_cls_method_string_return.rb +53 -0
- data/vendor/spinel/test/module_cls_method_string_return.rb.expected +5 -0
- data/vendor/spinel/test/module_const_array_widen.rb +36 -0
- data/vendor/spinel/test/module_const_array_widen.rb.expected +1 -0
- data/vendor/spinel/test/module_dispatch_param_widen.rb +55 -0
- data/vendor/spinel/test/module_dispatch_param_widen.rb.expected +1 -0
- data/vendor/spinel/test/module_function_namespace.rb +58 -0
- data/vendor/spinel/test/module_ivar_hash.rb +61 -0
- data/vendor/spinel/test/module_ivar_hash.rb.expected +7 -0
- data/vendor/spinel/test/module_relative_constant_path.rb +26 -0
- data/vendor/spinel/test/module_relative_constant_path.rb.expected +2 -0
- data/vendor/spinel/test/module_singleton_accessor.rb +65 -0
- data/vendor/spinel/test/module_singleton_accessor.rb.expected +3 -0
- data/vendor/spinel/test/module_singleton_accessor_poly.rb +62 -0
- data/vendor/spinel/test/module_singleton_accessor_poly.rb.expected +7 -0
- data/vendor/spinel/test/multi_arg_block_call.rb +56 -0
- data/vendor/spinel/test/multi_arg_block_call.rb.expected +5 -0
- data/vendor/spinel/test/multi_arg_yield.rb +70 -0
- data/vendor/spinel/test/multi_arg_yield.rb.expected +6 -0
- data/vendor/spinel/test/multi_assign_ivar.rb +33 -0
- data/vendor/spinel/test/multi_assign_ivar.rb.expected +1 -0
- data/vendor/spinel/test/multi_return.rb +35 -0
- data/vendor/spinel/test/multi_return.rb.expected +10 -0
- data/vendor/spinel/test/multi_return_bare.rb +77 -0
- data/vendor/spinel/test/multi_return_bare.rb.expected +16 -0
- data/vendor/spinel/test/multi_write_const.rb +36 -0
- data/vendor/spinel/test/multi_write_const.rb.expected +9 -0
- data/vendor/spinel/test/multi_write_from_poly_recv.rb +34 -0
- data/vendor/spinel/test/multi_write_from_poly_recv.rb.expected +1 -0
- data/vendor/spinel/test/multi_write_ivar.rb +34 -0
- data/vendor/spinel/test/multi_write_ivar.rb.expected +3 -0
- data/vendor/spinel/test/multi_write_ivar_const_from_array_rhs.rb +53 -0
- data/vendor/spinel/test/multi_write_ivar_const_from_array_rhs.rb.expected +6 -0
- data/vendor/spinel/test/multi_write_ivar_widening.rb +10 -0
- data/vendor/spinel/test/multi_write_ivar_widening.rb.expected +2 -0
- data/vendor/spinel/test/multi_write_map_block.rb +31 -0
- data/vendor/spinel/test/multi_write_map_block.rb.expected +7 -0
- data/vendor/spinel/test/multi_write_setter.rb +28 -0
- data/vendor/spinel/test/multi_write_setter.rb.expected +3 -0
- data/vendor/spinel/test/multi_write_typed_array_dispatch.rb +44 -0
- data/vendor/spinel/test/multi_write_typed_array_dispatch.rb.expected +3 -0
- data/vendor/spinel/test/nested_class_in_class.rb +38 -0
- data/vendor/spinel/test/nested_class_in_class.rb.expected +3 -0
- data/vendor/spinel/test/nested_class_module_const_resolution.rb +38 -0
- data/vendor/spinel/test/nested_class_module_const_resolution.rb.expected +2 -0
- data/vendor/spinel/test/nil_ivar.rb +44 -0
- data/vendor/spinel/test/nil_ivar.rb.expected +5 -0
- data/vendor/spinel/test/no_attr_write_shortcut_complex.rb +33 -0
- data/vendor/spinel/test/no_attr_write_shortcut_complex.rb.expected +3 -0
- data/vendor/spinel/test/no_attr_write_shortcut_multi.rb +38 -0
- data/vendor/spinel/test/no_attr_write_shortcut_multi.rb.expected +4 -0
- data/vendor/spinel/test/no_keywords_param.rb +15 -0
- data/vendor/spinel/test/no_keywords_param.rb.expected +2 -0
- data/vendor/spinel/test/nullable.rb +26 -0
- data/vendor/spinel/test/nullable.rb.expected +2 -0
- data/vendor/spinel/test/obj_array.rb +26 -0
- data/vendor/spinel/test/obj_array.rb.expected +6 -0
- data/vendor/spinel/test/object_new_sentinel.rb +18 -0
- data/vendor/spinel/test/object_new_sentinel.rb.expected +3 -0
- data/vendor/spinel/test/object_truthy.rb +31 -0
- data/vendor/spinel/test/object_truthy.rb.expected +5 -0
- data/vendor/spinel/test/op_assign_user_operator.rb +36 -0
- data/vendor/spinel/test/open_class.rb +27 -0
- data/vendor/spinel/test/open_class.rb.expected +4 -0
- data/vendor/spinel/test/optional_string_param_method.rb +11 -0
- data/vendor/spinel/test/optional_string_param_method.rb.expected +3 -0
- data/vendor/spinel/test/param_inference_if_predicate.rb +90 -0
- data/vendor/spinel/test/param_inference_if_predicate.rb.expected +3 -0
- data/vendor/spinel/test/param_narrow_from_body_call.rb +34 -0
- data/vendor/spinel/test/param_narrow_from_body_call.rb.expected +2 -0
- data/vendor/spinel/test/param_widens_when_body_assigns_string.rb +21 -0
- data/vendor/spinel/test/param_widens_when_body_assigns_string.rb.expected +6 -0
- data/vendor/spinel/test/pattern.rb +41 -0
- data/vendor/spinel/test/pattern.rb.expected +9 -0
- data/vendor/spinel/test/poly.rb +24 -0
- data/vendor/spinel/test/poly.rb.expected +9 -0
- data/vendor/spinel/test/poly2.rb +34 -0
- data/vendor/spinel/test/poly2.rb.expected +9 -0
- data/vendor/spinel/test/poly_arith.rb +34 -0
- data/vendor/spinel/test/poly_arith.rb.expected +10 -0
- data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb +37 -0
- data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb.expected +9 -0
- data/vendor/spinel/test/poly_array_slot_literal.rb +41 -0
- data/vendor/spinel/test/poly_array_slot_sized_default.rb +33 -0
- data/vendor/spinel/test/poly_box_int_array.rb +13 -0
- data/vendor/spinel/test/poly_box_int_array.rb.expected +2 -0
- data/vendor/spinel/test/poly_dispatch_args_ret.rb +45 -0
- data/vendor/spinel/test/poly_dispatch_args_ret.rb.expected +4 -0
- data/vendor/spinel/test/poly_dispatch_arity_padding.rb +36 -0
- data/vendor/spinel/test/poly_dispatch_arity_truncate.rb +45 -0
- data/vendor/spinel/test/poly_dispatch_attr_reader.rb +44 -0
- data/vendor/spinel/test/poly_dispatch_attr_reader.rb.expected +4 -0
- data/vendor/spinel/test/poly_dispatch_builtin.rb +16 -0
- data/vendor/spinel/test/poly_dispatch_builtin.rb.expected +2 -0
- data/vendor/spinel/test/poly_dispatch_builtin_all.rb +34 -0
- data/vendor/spinel/test/poly_dispatch_builtin_all.rb.expected +8 -0
- data/vendor/spinel/test/poly_dispatch_ptr_array.rb +57 -0
- data/vendor/spinel/test/poly_dispatch_ptr_array.rb.expected +6 -0
- data/vendor/spinel/test/poly_equality_mixed_sites.rb +40 -0
- data/vendor/spinel/test/poly_equality_mixed_sites.rb.expected +10 -0
- data/vendor/spinel/test/poly_gc.rb +39 -0
- data/vendor/spinel/test/poly_gc.rb.expected +3 -0
- data/vendor/spinel/test/poly_hash_literal_from_ivar.rb +47 -0
- data/vendor/spinel/test/poly_hash_literal_from_ivar.rb.expected +5 -0
- data/vendor/spinel/test/poly_hash_with_range.rb +36 -0
- data/vendor/spinel/test/poly_hash_with_range.rb.expected +10 -0
- data/vendor/spinel/test/poly_hash_with_time.rb +32 -0
- data/vendor/spinel/test/poly_hash_with_time.rb.expected +8 -0
- data/vendor/spinel/test/poly_int_arith_auto_unify.rb +26 -0
- data/vendor/spinel/test/poly_int_arith_auto_unify.rb.expected +4 -0
- data/vendor/spinel/test/poly_int_bit_index.rb +50 -0
- data/vendor/spinel/test/poly_int_bit_index.rb.expected +14 -0
- data/vendor/spinel/test/poly_int_bitops_auto_unify.rb +20 -0
- data/vendor/spinel/test/poly_int_bitops_auto_unify.rb.expected +5 -0
- data/vendor/spinel/test/poly_is_a.rb +47 -0
- data/vendor/spinel/test/poly_is_a.rb.expected +10 -0
- data/vendor/spinel/test/poly_keyed_hash_method_dedup.rb +37 -0
- data/vendor/spinel/test/poly_keyed_hash_method_dedup.rb.expected +4 -0
- data/vendor/spinel/test/poly_keyed_hash_pipeline.rb +40 -0
- data/vendor/spinel/test/poly_keyed_hash_pipeline.rb.expected +2 -0
- data/vendor/spinel/test/poly_method_args.rb +23 -0
- data/vendor/spinel/test/poly_method_args.rb.expected +2 -0
- data/vendor/spinel/test/poly_method_mixed_return.rb +23 -0
- data/vendor/spinel/test/poly_method_mixed_return.rb.expected +2 -0
- data/vendor/spinel/test/poly_or_returns_value.rb +13 -0
- data/vendor/spinel/test/poly_or_returns_value.rb.expected +4 -0
- data/vendor/spinel/test/poly_recv_aref_box_arm.rb +41 -0
- data/vendor/spinel/test/poly_recv_aref_box_arm.rb.expected +4 -0
- data/vendor/spinel/test/poly_recv_aref_str_key.rb +42 -0
- data/vendor/spinel/test/poly_recv_aref_str_key.rb.expected +2 -0
- data/vendor/spinel/test/poly_recv_bracket_assign.rb +31 -0
- data/vendor/spinel/test/poly_recv_bracket_assign.rb.expected +1 -0
- data/vendor/spinel/test/poly_recv_each.rb +35 -0
- data/vendor/spinel/test/poly_recv_each.rb.expected +7 -0
- data/vendor/spinel/test/poly_return_value_class.rb +66 -0
- data/vendor/spinel/test/poly_return_value_class.rb.expected +7 -0
- data/vendor/spinel/test/poly_self_deref.rb +28 -0
- data/vendor/spinel/test/poly_self_deref.rb.expected +2 -0
- data/vendor/spinel/test/poly_shl_array_push_dispatch.rb +35 -0
- data/vendor/spinel/test/poly_shl_array_push_dispatch.rb.expected +5 -0
- data/vendor/spinel/test/poly_slice_assign.rb +26 -0
- data/vendor/spinel/test/poly_slice_assign.rb.expected +3 -0
- data/vendor/spinel/test/poly_str_append.rb +40 -0
- data/vendor/spinel/test/poly_str_append.rb.expected +2 -0
- data/vendor/spinel/test/poly_to_i_via_str_poly_hash.rb +19 -0
- data/vendor/spinel/test/poly_to_i_via_str_poly_hash.rb.expected +1 -0
- data/vendor/spinel/test/post_execution.rb +17 -0
- data/vendor/spinel/test/post_execution.rb.expected +4 -0
- data/vendor/spinel/test/pre_execution.rb +18 -0
- data/vendor/spinel/test/pre_execution.rb.expected +4 -0
- data/vendor/spinel/test/primitive_method_shadow.rb +48 -0
- data/vendor/spinel/test/primitive_method_shadow.rb.expected +4 -0
- data/vendor/spinel/test/primitive_method_shadow_int_recv.rb +47 -0
- data/vendor/spinel/test/primitive_method_shadow_int_recv.rb.expected +1 -0
- data/vendor/spinel/test/proc.rb +42 -0
- data/vendor/spinel/test/proc.rb.expected +8 -0
- data/vendor/spinel/test/proc_closure.rb +44 -0
- data/vendor/spinel/test/proc_closure.rb.expected +8 -0
- data/vendor/spinel/test/proc_hash_value.rb +27 -0
- data/vendor/spinel/test/proc_hash_value.rb.expected +1 -0
- data/vendor/spinel/test/ptr_array.rb +107 -0
- data/vendor/spinel/test/ptr_array.rb.expected +23 -0
- data/vendor/spinel/test/range.rb +130 -0
- data/vendor/spinel/test/range.rb.expected +61 -0
- data/vendor/spinel/test/redo.rb +263 -0
- data/vendor/spinel/test/redo.rb.expected +71 -0
- data/vendor/spinel/test/reduce_acc_shadow.rb +31 -0
- data/vendor/spinel/test/reduce_acc_shadow.rb.expected +5 -0
- data/vendor/spinel/test/regex.rb +152 -0
- data/vendor/spinel/test/regex.rb.expected +43 -0
- data/vendor/spinel/test/regexp.rb +34 -0
- data/vendor/spinel/test/regexp.rb.expected +12 -0
- data/vendor/spinel/test/reopen_class.rb +33 -0
- data/vendor/spinel/test/reopen_class.rb.expected +5 -0
- data/vendor/spinel/test/require/lib/greeter.rb +9 -0
- data/vendor/spinel/test/require/main.rb +5 -0
- data/vendor/spinel/test/require_dedup/lib/data.rb +2 -0
- data/vendor/spinel/test/require_dedup/lib/types.rb +1 -0
- data/vendor/spinel/test/require_dedup/main.rb +8 -0
- data/vendor/spinel/test/rescue.rb +48 -0
- data/vendor/spinel/test/rescue.rb.expected +7 -0
- data/vendor/spinel/test/rescue_modifier_assign.rb +24 -0
- data/vendor/spinel/test/rescue_modifier_assign.rb.expected +4 -0
- data/vendor/spinel/test/rightward_assign.rb +36 -0
- data/vendor/spinel/test/rightward_assign.rb.expected +6 -0
- data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb +27 -0
- data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb.expected +3 -0
- data/vendor/spinel/test/sample_user_method.rb +20 -0
- data/vendor/spinel/test/scan_ivars_inherited_slot.rb +32 -0
- data/vendor/spinel/test/scan_new_calls_class_scope.rb +35 -0
- data/vendor/spinel/test/scan_new_calls_class_scope.rb.expected +1 -0
- data/vendor/spinel/test/send.rb +15 -0
- data/vendor/spinel/test/send.rb.expected +2 -0
- data/vendor/spinel/test/shareable_constant.rb +10 -0
- data/vendor/spinel/test/shareable_constant.rb.expected +2 -0
- data/vendor/spinel/test/sized_poly_array_nil_n.rb +37 -0
- data/vendor/spinel/test/sized_poly_array_nil_n.rb.expected +3 -0
- data/vendor/spinel/test/source_file.rb +37 -0
- data/vendor/spinel/test/source_file.rb.expected +8 -0
- data/vendor/spinel/test/splat_call.rb +72 -0
- data/vendor/spinel/test/splat_call.rb.expected +35 -0
- data/vendor/spinel/test/splat_destructure.rb +56 -0
- data/vendor/spinel/test/splat_destructure.rb.expected +36 -0
- data/vendor/spinel/test/splat_destructure_poly.rb +26 -0
- data/vendor/spinel/test/splat_destructure_poly.rb.expected +8 -0
- data/vendor/spinel/test/stdlib.rb +28 -0
- data/vendor/spinel/test/stdlib.rb.expected +5 -0
- data/vendor/spinel/test/stringio.rb +84 -0
- data/vendor/spinel/test/stringio.rb.expected +27 -0
- data/vendor/spinel/test/strip_nullable_int_cast.rb +24 -0
- data/vendor/spinel/test/strip_nullable_int_cast.rb.expected +1 -0
- data/vendor/spinel/test/struct.rb +25 -0
- data/vendor/spinel/test/struct.rb.expected +8 -0
- data/vendor/spinel/test/struct_inherit.rb +28 -0
- data/vendor/spinel/test/struct_inherit.rb.expected +7 -0
- data/vendor/spinel/test/struct_kw.rb +16 -0
- data/vendor/spinel/test/struct_kw.rb.expected +5 -0
- data/vendor/spinel/test/subclass_inherits_module_parent.rb +40 -0
- data/vendor/spinel/test/subclass_inherits_module_parent.rb.expected +3 -0
- data/vendor/spinel/test/super_arg_cross_class_cast.rb +39 -0
- data/vendor/spinel/test/super_arg_cross_class_cast.rb.expected +2 -0
- data/vendor/spinel/test/super_forwarding.rb +25 -0
- data/vendor/spinel/test/super_forwarding.rb.expected +3 -0
- data/vendor/spinel/test/sym_case.rb +15 -0
- data/vendor/spinel/test/sym_case.rb.expected +4 -0
- data/vendor/spinel/test/sym_poly_hash_merge.rb +47 -0
- data/vendor/spinel/test/sym_poly_hash_merge.rb.expected +11 -0
- data/vendor/spinel/test/symbol_ivar_reassign.rb +25 -0
- data/vendor/spinel/test/symbol_ivar_reassign.rb.expected +2 -0
- data/vendor/spinel/test/three_level_array_outer_index.rb +87 -0
- data/vendor/spinel/test/three_level_array_outer_index.rb.expected +17 -0
- data/vendor/spinel/test/toplevel_ivar_array.rb +19 -0
- data/vendor/spinel/test/toplevel_ivar_array.rb.expected +4 -0
- data/vendor/spinel/test/truncate_module_method.rb +46 -0
- data/vendor/spinel/test/truncate_module_method.rb.expected +6 -0
- data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb +20 -0
- data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb.expected +1 -0
- data/vendor/spinel/test/undef.rb +33 -0
- data/vendor/spinel/test/undef.rb.expected +2 -0
- data/vendor/spinel/test/user_method_named_like_mutator.rb +30 -0
- data/vendor/spinel/test/user_method_named_like_mutator.rb.expected +2 -0
- data/vendor/spinel/test/value_type_ctor_gc_save.rb +46 -0
- data/vendor/spinel/test/value_type_ctor_gc_save.rb.expected +3 -0
- data/vendor/spinel/test/widen_int_obj_to_poly.rb +29 -0
- data/vendor/spinel/test/yield.rb +67 -0
- data/vendor/spinel/test/yield.rb.expected +5 -0
- data/vendor/spinel/test/yield_method_call_in_method_body.rb +58 -0
- data/vendor/spinel/test/yield_method_call_in_method_body.rb.expected +4 -0
- metadata +778 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Test rescue/raise/ensure
|
|
2
|
+
|
|
3
|
+
def safe_div(a, b)
|
|
4
|
+
if b == 0
|
|
5
|
+
raise "division by zero"
|
|
6
|
+
end
|
|
7
|
+
a / b
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Basic rescue
|
|
11
|
+
begin
|
|
12
|
+
result = safe_div(10, 2)
|
|
13
|
+
puts result # 5
|
|
14
|
+
rescue
|
|
15
|
+
puts "error"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Rescue with exception
|
|
19
|
+
begin
|
|
20
|
+
result = safe_div(10, 0)
|
|
21
|
+
puts result
|
|
22
|
+
rescue => e
|
|
23
|
+
puts e # division by zero
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Ensure
|
|
27
|
+
def with_ensure
|
|
28
|
+
puts "start"
|
|
29
|
+
raise "oops"
|
|
30
|
+
puts "unreachable"
|
|
31
|
+
rescue => e
|
|
32
|
+
puts e # oops
|
|
33
|
+
ensure
|
|
34
|
+
puts "cleanup"
|
|
35
|
+
end
|
|
36
|
+
with_ensure
|
|
37
|
+
|
|
38
|
+
# Retry pattern
|
|
39
|
+
attempts = 0
|
|
40
|
+
begin
|
|
41
|
+
attempts += 1
|
|
42
|
+
raise "fail" if attempts < 3
|
|
43
|
+
puts attempts # 3
|
|
44
|
+
rescue
|
|
45
|
+
retry if attempts < 3
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
puts "done"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# `expr rescue fallback` as an rvalue — verifies that
|
|
2
|
+
# RescueModifierNode is wired into infer_type so the receiving
|
|
3
|
+
# variable gets the unified type rather than the default int.
|
|
4
|
+
#
|
|
5
|
+
# Note: Ruby's `=` has higher precedence than the rescue modifier,
|
|
6
|
+
# so `a = "x" rescue "y"` parses as `(a = "x") rescue "y"` — the
|
|
7
|
+
# RescueModifierNode wraps the assignment, not the rvalue. To
|
|
8
|
+
# actually exercise the RescueModifierNode-as-rvalue path through
|
|
9
|
+
# infer_type, the rescue must be parenthesized as a sub-expression.
|
|
10
|
+
|
|
11
|
+
# Same-type branches: string=string. Trivial baseline.
|
|
12
|
+
a = ("ok" rescue "fallback")
|
|
13
|
+
puts a
|
|
14
|
+
|
|
15
|
+
# Mismatched branches: main is `raise` (returns int 0 from
|
|
16
|
+
# compile_expr but never actually returns), fallback is string.
|
|
17
|
+
# The fallback wins type inference; result type is string.
|
|
18
|
+
b = (raise "boom" rescue "default")
|
|
19
|
+
puts b
|
|
20
|
+
|
|
21
|
+
# Same-type int. Endless method shape stays unchanged.
|
|
22
|
+
def parse_int(s) = Integer(s) rescue 0
|
|
23
|
+
puts parse_int("42")
|
|
24
|
+
puts parse_int("abc")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Rightward assignment `expr => var` (Ruby 3.0+). Prism encodes this
|
|
2
|
+
# as a MatchRequiredNode whose `pattern` is a LocalVariableTargetNode.
|
|
3
|
+
# spinel_parse rewrites the simple-target case to a LocalVariableWriteNode
|
|
4
|
+
# at the AST boundary so the codegen reuses the regular assignment path.
|
|
5
|
+
|
|
6
|
+
# 1. Integer rightward assignment.
|
|
7
|
+
42 => x
|
|
8
|
+
puts x
|
|
9
|
+
# 42
|
|
10
|
+
|
|
11
|
+
# 2. String rightward assignment.
|
|
12
|
+
"hello" => msg
|
|
13
|
+
puts msg
|
|
14
|
+
# hello
|
|
15
|
+
|
|
16
|
+
# 3. Method-call result rightward-assigned.
|
|
17
|
+
def square(n)
|
|
18
|
+
n * n
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
square(7) => sq
|
|
22
|
+
puts sq
|
|
23
|
+
# 49
|
|
24
|
+
|
|
25
|
+
# 4. Rightward inside an expression (each statement creates one local).
|
|
26
|
+
1 + 2 + 3 => total
|
|
27
|
+
total * 2 => doubled
|
|
28
|
+
puts total
|
|
29
|
+
# 6
|
|
30
|
+
puts doubled
|
|
31
|
+
# 12
|
|
32
|
+
|
|
33
|
+
# 5. Boolean.
|
|
34
|
+
(5 > 3) => is_bigger
|
|
35
|
+
puts is_bigger
|
|
36
|
+
# true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `compile_bracket_assign`'s `rt == "poly"` branch dispatches
|
|
2
|
+
# `@arr[i] = v` by runtime cls_id, but when the slot's runtime
|
|
3
|
+
# storage is IntArray and the rhs carries a non-int payload (a
|
|
4
|
+
# typed pointer / box whose cls_id we'd lose if cast to int),
|
|
5
|
+
# the write silently truncates to int.
|
|
6
|
+
#
|
|
7
|
+
# This patch widens the storage at runtime: allocate a fresh
|
|
8
|
+
# PolyArray, copy each existing IntArray element as sp_box_int,
|
|
9
|
+
# set the new slot, and reassign the slot expression to hold the
|
|
10
|
+
# new PolyArray.
|
|
11
|
+
|
|
12
|
+
class C
|
|
13
|
+
def init_arr_widen
|
|
14
|
+
@arr = [10, 20, 30] # int_array storage
|
|
15
|
+
@arr[1] = "string!" # heterogeneous → triggers runtime widen
|
|
16
|
+
end
|
|
17
|
+
def init_str
|
|
18
|
+
@arr = "scalar" # forces slot type to widen to poly
|
|
19
|
+
end
|
|
20
|
+
def at(i); @arr[i]; end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
c = C.new
|
|
24
|
+
c.init_arr_widen
|
|
25
|
+
puts c.at(0) # 10 (preserved as int)
|
|
26
|
+
puts c.at(1) # "string!" (recovered via widen)
|
|
27
|
+
puts c.at(2) # 30
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# `infer_method_name_type` had a name-based shortcut for `sample`
|
|
2
|
+
# that returned the Array#sample default of int regardless of recv.
|
|
3
|
+
# A user-defined `sample` on an obj receiver inferred as int even
|
|
4
|
+
# though the method returns a non-int — and downstream consumers
|
|
5
|
+
# (puts, comparisons, etc.) used the wrong shape.
|
|
6
|
+
|
|
7
|
+
class Box
|
|
8
|
+
def initialize(label)
|
|
9
|
+
@label = label
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
attr_reader :label
|
|
13
|
+
|
|
14
|
+
def sample
|
|
15
|
+
@label
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
b = Box.new("ok")
|
|
20
|
+
puts b.sample # ok
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# When a child class first writes to an ivar that already lives on
|
|
2
|
+
# a parent, scan_ivars used to register the ivar on the child too.
|
|
3
|
+
# update_ivar_type then recursed up to the parent and widened
|
|
4
|
+
# (e.g. `int` → `poly` for heterogeneous writes), but the child's
|
|
5
|
+
# own-table entry kept the new write's narrower type. Two tables
|
|
6
|
+
# disagreed about the slot — and downstream type lookups picked
|
|
7
|
+
# the wrong one depending on path, so codegen for the same field
|
|
8
|
+
# disagreed across class methods.
|
|
9
|
+
#
|
|
10
|
+
# Now scan_ivars detects that the slot is already in an ancestor's
|
|
11
|
+
# table and routes the write through update_ivar_type without
|
|
12
|
+
# adding a duplicate entry to the child. The parent's table stays
|
|
13
|
+
# the single source of truth.
|
|
14
|
+
|
|
15
|
+
class Parent
|
|
16
|
+
def initialize
|
|
17
|
+
@v = 0
|
|
18
|
+
@v = "s" # parent widens @v to poly
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Child < Parent
|
|
23
|
+
def initialize
|
|
24
|
+
super
|
|
25
|
+
@v = 42 # child writes through inherited slot
|
|
26
|
+
end
|
|
27
|
+
def read
|
|
28
|
+
@v
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
puts Child.new.read # 42
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `scan_new_calls` walks the AST looking for `Foo.new(args)` and
|
|
2
|
+
# propagates each arg's inferred type into Foo's initialize param-
|
|
3
|
+
# type table. The arg inference uses `infer_type`, which for an
|
|
4
|
+
# `InstanceVariableReadNode` consults `@current_class_idx` —
|
|
5
|
+
# previously the scan never set it.
|
|
6
|
+
#
|
|
7
|
+
# Result: `Bar.new(@x, ...)` inside `Foo#initialize` resolved
|
|
8
|
+
# `@x` against an empty scope (returned the int default), so
|
|
9
|
+
# Bar.initialize's first param wedged at mrb_int. The fix pins
|
|
10
|
+
# `@current_class_idx` while recursing into ClassNode bodies.
|
|
11
|
+
|
|
12
|
+
class A
|
|
13
|
+
attr_reader :n
|
|
14
|
+
def initialize(n)
|
|
15
|
+
@n = n
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class B
|
|
20
|
+
attr_reader :a
|
|
21
|
+
def initialize(a_arg)
|
|
22
|
+
@a = a_arg
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class C
|
|
27
|
+
attr_reader :b
|
|
28
|
+
def initialize
|
|
29
|
+
@inner = A.new(7)
|
|
30
|
+
@b = B.new(@inner)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
c = C.new
|
|
35
|
+
puts c.b.a.n # 7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
7
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# shareable_constant_value: literal
|
|
2
|
+
# ShareableConstantNode — the `# shareable_constant_value:` magic comment.
|
|
3
|
+
#
|
|
4
|
+
# CRuby uses this to mark constants for Ractor-shareable initialization.
|
|
5
|
+
# Spinel has no Ractor runtime, so the shareability state is a no-op
|
|
6
|
+
# and the wrapped constant write executes normally.
|
|
7
|
+
|
|
8
|
+
FOO = [1, 2, 3]
|
|
9
|
+
puts FOO.length
|
|
10
|
+
puts FOO.first
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# `@arr = [nil] * N` against an ivar slot inferred as `poly`
|
|
2
|
+
# (sp_RbVal — wider than poly_array, set by `finalize_ivar_heterogeneity`
|
|
3
|
+
# when distinct non-array writes are observed) used to compile to
|
|
4
|
+
# `sp_box_int_array(sp_IntArray_new())`. The runtime storage was
|
|
5
|
+
# IntArray, so subsequent heterogeneous writes via the poly-recv
|
|
6
|
+
# `[]=` runtime widening path (or directly via `[]=` with cls_id
|
|
7
|
+
# dispatch) lost the typed-pointer cls_id on the IntArray-typed
|
|
8
|
+
# storage path.
|
|
9
|
+
#
|
|
10
|
+
# Repro: force the slot type to plain `poly` via mixed scalar
|
|
11
|
+
# observations. Then `[nil] * N` against the poly slot must
|
|
12
|
+
# produce a PolyArray, not IntArray, for cls_id-preserving
|
|
13
|
+
# heterogeneous reads/writes to work.
|
|
14
|
+
|
|
15
|
+
class C
|
|
16
|
+
def init_arr_widen
|
|
17
|
+
@arr = [nil] * 8
|
|
18
|
+
@arr[0] = "string-payload"
|
|
19
|
+
@arr[1] = 42
|
|
20
|
+
@arr[2] = :sym
|
|
21
|
+
end
|
|
22
|
+
def init_str
|
|
23
|
+
@arr = "scalar"
|
|
24
|
+
end
|
|
25
|
+
def init_int
|
|
26
|
+
@arr = 7
|
|
27
|
+
end
|
|
28
|
+
def at(i)
|
|
29
|
+
@arr[i]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
c = C.new
|
|
34
|
+
c.init_arr_widen
|
|
35
|
+
puts c.at(0).to_s # "string-payload"
|
|
36
|
+
puts c.at(1).to_i # 42
|
|
37
|
+
puts c.at(2).to_s # "sym"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# SourceFileNode -- the `__FILE__` keyword.
|
|
2
|
+
#
|
|
3
|
+
# Spinel inlines `require`/`require_relative` at parse time, so call
|
|
4
|
+
# sites in different source files are not distinguished. `__FILE__`
|
|
5
|
+
# always returns the toplevel script path passed to spinel_parse,
|
|
6
|
+
# matching CRuby's behavior for top-level uses.
|
|
7
|
+
#
|
|
8
|
+
# This test exercises __FILE__ end-to-end: it must (a) emit the path,
|
|
9
|
+
# (b) flow as `string` through type inference (so dispatch picks the
|
|
10
|
+
# string-method arms), (c) interoperate with literals (concat / compare
|
|
11
|
+
# / interpolate), and (d) round-trip through a typed-String parameter
|
|
12
|
+
# at a method call site.
|
|
13
|
+
|
|
14
|
+
# Basic emission.
|
|
15
|
+
puts __FILE__
|
|
16
|
+
|
|
17
|
+
# String#length returns an Integer -> dispatch hit the string arm.
|
|
18
|
+
puts __FILE__.length > 0
|
|
19
|
+
|
|
20
|
+
# Concat with literal -> __FILE__ is a `string`, not poly/object.
|
|
21
|
+
puts "[" + __FILE__ + "]"
|
|
22
|
+
|
|
23
|
+
# Interpolation works (path appears verbatim).
|
|
24
|
+
puts "got: #{__FILE__}"
|
|
25
|
+
|
|
26
|
+
# Two reads compare equal -- same toplevel path resolves identically.
|
|
27
|
+
puts __FILE__ == __FILE__
|
|
28
|
+
|
|
29
|
+
# String predicates dispatch via the string arm.
|
|
30
|
+
puts __FILE__.end_with?(".rb")
|
|
31
|
+
puts __FILE__.include?("source_file")
|
|
32
|
+
|
|
33
|
+
# Round-trip through a typed-String parameter at a method call site.
|
|
34
|
+
def show(s)
|
|
35
|
+
puts "param: " + s
|
|
36
|
+
end
|
|
37
|
+
show(__FILE__)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Splat operator at the call site.
|
|
2
|
+
# Covers pure splat, splat into a method with required + rest params,
|
|
3
|
+
# and mixed prefix/splat/suffix into a rest-collecting method.
|
|
4
|
+
|
|
5
|
+
def collect(*nums)
|
|
6
|
+
total = 0
|
|
7
|
+
nums.each { |n| total += n }
|
|
8
|
+
puts nums.length
|
|
9
|
+
puts total
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Pure splat into rest-only method
|
|
13
|
+
args = [1, 2, 3]
|
|
14
|
+
collect(*args) # length 3, total 6
|
|
15
|
+
|
|
16
|
+
# Empty splat
|
|
17
|
+
empty = []
|
|
18
|
+
collect(*empty) # length 0, total 0
|
|
19
|
+
|
|
20
|
+
# Splat with a method that has fixed prefix + rest
|
|
21
|
+
def mix(a, b, *rest)
|
|
22
|
+
puts a
|
|
23
|
+
puts b
|
|
24
|
+
puts rest.length
|
|
25
|
+
rest.each { |x| puts x }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Pure splat fills both fixed slots and the rest
|
|
29
|
+
quad = [10, 20, 30, 40]
|
|
30
|
+
mix(*quad) # a=10, b=20, rest=[30,40]
|
|
31
|
+
|
|
32
|
+
# Prefix + splat fills the rest
|
|
33
|
+
tail = [3, 4, 5]
|
|
34
|
+
mix(1, 2, *tail) # a=1, b=2, rest=[3,4,5]
|
|
35
|
+
|
|
36
|
+
# Prefix + splat + suffix all bundle into rest
|
|
37
|
+
mid = [3, 4]
|
|
38
|
+
mix(1, 2, *mid, 5, 6) # a=1, b=2, rest=[3,4,5,6]
|
|
39
|
+
|
|
40
|
+
# Bare call leaves rest empty (regression check for the empty-rest fix)
|
|
41
|
+
mix(100, 200) # a=100, b=200, rest=[]
|
|
42
|
+
|
|
43
|
+
# Prefix overflows into rest when method has *only* a rest param
|
|
44
|
+
collect(7, *args) # length 4, total 13
|
|
45
|
+
collect(7, 8, *args, 9) # length 6, total 36
|
|
46
|
+
|
|
47
|
+
# Mixed-type splat sources: poly_array source, mixed prefix/suffix.
|
|
48
|
+
# Spinel's *rest is always int_array so element values are mrb_int bits
|
|
49
|
+
# for non-int elements — but the length is correct and the bundle
|
|
50
|
+
# round-trips intact for downstream splatting.
|
|
51
|
+
def count(*xs)
|
|
52
|
+
puts xs.length
|
|
53
|
+
end
|
|
54
|
+
count(1, "x", 2.0) # 3
|
|
55
|
+
mix = [1, "two", :three, 4.0]
|
|
56
|
+
count(*mix) # 4
|
|
57
|
+
count(0, *mix, "tail", 99.5) # 7
|
|
58
|
+
|
|
59
|
+
# Two splats in one call (multi-splat fallback path).
|
|
60
|
+
left = [1, 2]
|
|
61
|
+
right = [3, 4, 5]
|
|
62
|
+
count(*left, *right) # 5
|
|
63
|
+
|
|
64
|
+
# Splat into a method with str fixed prefix + rest — exercises the
|
|
65
|
+
# splat-aware param-type inference (without it, "first" would default to
|
|
66
|
+
# mrb_int and we'd print garbage instead of "alpha").
|
|
67
|
+
def head_str(first, *tail)
|
|
68
|
+
puts first
|
|
69
|
+
puts tail.length
|
|
70
|
+
end
|
|
71
|
+
strs = ["alpha", "beta", "gamma"]
|
|
72
|
+
head_str(*strs) # alpha / 2
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Splat (rest) target in multi-assignment.
|
|
2
|
+
# Covers leading / trailing / middle splat against array literals,
|
|
3
|
+
# different element types, and a rest-returning function source.
|
|
4
|
+
|
|
5
|
+
# Trailing splat from array literal (int_array)
|
|
6
|
+
a, *b = [1, 2, 3, 4]
|
|
7
|
+
puts a # 1
|
|
8
|
+
puts b.length # 3
|
|
9
|
+
b.each { |v| puts v } # 2 / 3 / 4
|
|
10
|
+
|
|
11
|
+
# Leading splat (everything but the last lands in the splat target)
|
|
12
|
+
*xs, last = [10, 20, 30, 40]
|
|
13
|
+
puts last # 40
|
|
14
|
+
puts xs.length # 3
|
|
15
|
+
xs.each { |v| puts v } # 10 / 20 / 30
|
|
16
|
+
|
|
17
|
+
# Middle splat
|
|
18
|
+
first, *mid, fin = [100, 200, 300, 400, 500]
|
|
19
|
+
puts first # 100
|
|
20
|
+
puts fin # 500
|
|
21
|
+
puts mid.length # 3
|
|
22
|
+
mid.each { |v| puts v } # 200 / 300 / 400
|
|
23
|
+
|
|
24
|
+
# Splat with str_array RHS
|
|
25
|
+
s, *rest = ["alpha", "beta", "gamma"]
|
|
26
|
+
puts s # alpha
|
|
27
|
+
puts rest.length # 2
|
|
28
|
+
rest.each { |w| puts w } # beta / gamma
|
|
29
|
+
|
|
30
|
+
# RHS shorter than fixed targets — splat target empty
|
|
31
|
+
p, *q = [42]
|
|
32
|
+
puts p # 42
|
|
33
|
+
puts q.length # 0
|
|
34
|
+
|
|
35
|
+
# Function returning typed array
|
|
36
|
+
def numbers
|
|
37
|
+
[7, 8, 9, 10]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
n1, *n_rest = numbers
|
|
41
|
+
puts n1 # 7
|
|
42
|
+
puts n_rest.length # 3
|
|
43
|
+
n_rest.each { |v| puts v } # 8 / 9 / 10
|
|
44
|
+
|
|
45
|
+
# Mixed-type destructure: each fixed target gets its own native type
|
|
46
|
+
ma, mb, mc = [1, "b", 2.0]
|
|
47
|
+
puts ma # 1
|
|
48
|
+
puts mb # b
|
|
49
|
+
puts mc # 2.0
|
|
50
|
+
|
|
51
|
+
# Mixed-type with splat: splat target becomes a poly_array
|
|
52
|
+
mx, *mmid, mlast = [10, "two", :three, 4.0, "five"]
|
|
53
|
+
puts mx # 10
|
|
54
|
+
puts mlast # five
|
|
55
|
+
puts mmid.length # 3
|
|
56
|
+
mmid.each { |mv| p mv } # "two" / :three / 4.0
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
1
|
|
2
|
+
3
|
|
3
|
+
2
|
|
4
|
+
3
|
|
5
|
+
4
|
|
6
|
+
40
|
|
7
|
+
3
|
|
8
|
+
10
|
|
9
|
+
20
|
|
10
|
+
30
|
|
11
|
+
100
|
|
12
|
+
500
|
|
13
|
+
3
|
|
14
|
+
200
|
|
15
|
+
300
|
|
16
|
+
400
|
|
17
|
+
alpha
|
|
18
|
+
2
|
|
19
|
+
beta
|
|
20
|
+
gamma
|
|
21
|
+
42
|
|
22
|
+
0
|
|
23
|
+
7
|
|
24
|
+
3
|
|
25
|
+
8
|
|
26
|
+
9
|
|
27
|
+
10
|
|
28
|
+
1
|
|
29
|
+
b
|
|
30
|
+
2.0
|
|
31
|
+
10
|
|
32
|
+
five
|
|
33
|
+
3
|
|
34
|
+
"two"
|
|
35
|
+
:three
|
|
36
|
+
4.0
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Splat destructure with a poly_array RHS — Gemini concern on PR #116:
|
|
2
|
+
# the runtime-slice path of compile_multi_write_splat had no case for
|
|
3
|
+
# poly_array, so it fell through to sp_IntArray_get / sp_IntArray_slice
|
|
4
|
+
# and the C compile rejected the type mismatch. With the fix the path
|
|
5
|
+
# uses sp_PolyArray_get / sp_PolyArray_slice for poly_array RHS.
|
|
6
|
+
|
|
7
|
+
def heterogeneous
|
|
8
|
+
["alpha", 1, "beta", 2.5, "gamma"]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Trailing splat — splat target is a sp_PolyArray * holding the tail.
|
|
12
|
+
a, b, *rest = heterogeneous
|
|
13
|
+
puts a # alpha
|
|
14
|
+
puts rest.length # 3
|
|
15
|
+
|
|
16
|
+
# Leading splat — splat target holds the head, then two scalar tails.
|
|
17
|
+
*head, y, z = heterogeneous
|
|
18
|
+
puts head.length # 3
|
|
19
|
+
puts z # gamma
|
|
20
|
+
puts y # 2.5 (Ruby) — verifies float scalar from poly RHS
|
|
21
|
+
|
|
22
|
+
# Middle splat — most exercise of the slice + bracketing helpers.
|
|
23
|
+
p, *mid, q = heterogeneous
|
|
24
|
+
puts mid.length # 3
|
|
25
|
+
puts p # alpha
|
|
26
|
+
puts q # gamma
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Test stdlib additions
|
|
2
|
+
|
|
3
|
+
# Array#join
|
|
4
|
+
arr = (1..5).to_a
|
|
5
|
+
puts arr.join(", ") # 1, 2, 3, 4, 5
|
|
6
|
+
|
|
7
|
+
# Array#uniq
|
|
8
|
+
nums = (1..5).to_a
|
|
9
|
+
nums.push(3)
|
|
10
|
+
nums.push(1)
|
|
11
|
+
uniq = nums.uniq
|
|
12
|
+
puts uniq.length # 5
|
|
13
|
+
|
|
14
|
+
# srand/rand
|
|
15
|
+
srand(0)
|
|
16
|
+
r = rand(100)
|
|
17
|
+
puts r >= 0 # true (some number)
|
|
18
|
+
|
|
19
|
+
# ARGV.length
|
|
20
|
+
puts ARGV.length # 0
|
|
21
|
+
|
|
22
|
+
# $stderr.puts
|
|
23
|
+
$stderr.puts("stderr msg")
|
|
24
|
+
|
|
25
|
+
# exit — skip (would terminate)
|
|
26
|
+
# sleep — skip (would delay)
|
|
27
|
+
|
|
28
|
+
puts "done"
|