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,16 @@
|
|
|
1
|
+
# AliasGlobalVariableNode -- `alias $copy $orig`.
|
|
2
|
+
#
|
|
3
|
+
# Compile-time only: Spinel registers $copy as a name pointing to
|
|
4
|
+
# $orig's storage slot. Subsequent reads/writes of either share
|
|
5
|
+
# state. Out of scope: dynamic alias from method body, since the
|
|
6
|
+
# entire compile-time map is built once at AST scan.
|
|
7
|
+
|
|
8
|
+
$orig = "hello"
|
|
9
|
+
alias $copy $orig
|
|
10
|
+
puts $copy # hello
|
|
11
|
+
|
|
12
|
+
$orig = "updated"
|
|
13
|
+
puts $copy # updated
|
|
14
|
+
|
|
15
|
+
$copy = "back"
|
|
16
|
+
puts $orig # back
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# AliasMethodNode -- `alias greet hello` inside a class body.
|
|
2
|
+
#
|
|
3
|
+
# CRuby snapshots the method at alias time -- if `hello` is later
|
|
4
|
+
# redefined, `greet` still calls the original. In Spinel's AOT model
|
|
5
|
+
# methods are static C functions; we register a compile-time
|
|
6
|
+
# synonym so dispatch on `.greet` routes to the same C function as
|
|
7
|
+
# `.hello`. Out of scope: alias inside a method body (CRuby allows
|
|
8
|
+
# but the semantics differ); alias of an inherited method.
|
|
9
|
+
|
|
10
|
+
class Greeter
|
|
11
|
+
def hello = "hi from hello"
|
|
12
|
+
alias greet hello
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
g = Greeter.new
|
|
16
|
+
puts g.hello # hi from hello
|
|
17
|
+
puts g.greet # hi from hello
|
|
18
|
+
|
|
19
|
+
# Two aliases of the same method.
|
|
20
|
+
class Counter
|
|
21
|
+
def value = 42
|
|
22
|
+
alias get value
|
|
23
|
+
alias read value
|
|
24
|
+
end
|
|
25
|
+
c = Counter.new
|
|
26
|
+
puts c.value # 42
|
|
27
|
+
puts c.get # 42
|
|
28
|
+
puts c.read # 42
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# `a && b` codegen used to lower to raw C `a && b` regardless of
|
|
2
|
+
# operand type. When either operand is `sp_RbVal` (poly), C rejects
|
|
3
|
+
# `&&` between a struct and an int. Wrap poly operands with
|
|
4
|
+
# `sp_poly_truthy`.
|
|
5
|
+
|
|
6
|
+
class Holder
|
|
7
|
+
def initialize
|
|
8
|
+
@poly = "x" # string first…
|
|
9
|
+
@poly = 42 # …then int — slot widens to poly
|
|
10
|
+
@counter = 0
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
attr_reader :poly, :counter
|
|
14
|
+
|
|
15
|
+
def chain
|
|
16
|
+
if @poly && @counter == 0
|
|
17
|
+
@counter = 1
|
|
18
|
+
end
|
|
19
|
+
@counter
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
h = Holder.new
|
|
24
|
+
puts h.chain # 1
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Anonymous `&` block forwarding (Ruby 3.1+).
|
|
2
|
+
#
|
|
3
|
+
# `def outer(&); inner(&); end` declares an unnamed block parameter
|
|
4
|
+
# and forwards it via the matching anonymous `&` in the call. Pre-fix,
|
|
5
|
+
# the parameter `BlockParameterNode { name: nil }` was registered with
|
|
6
|
+
# an empty name, leaving the method without a `_block`/`lv_` slot, and
|
|
7
|
+
# the forwarding `BlockArgumentNode { expression: -1 }` got dropped at
|
|
8
|
+
# the call site (it slipped through `find_block_arg`'s -1 return).
|
|
9
|
+
#
|
|
10
|
+
# Fix synthesizes the internal name `__anon_block` for unnamed block
|
|
11
|
+
# params so they flow through `find_block_param_name` and
|
|
12
|
+
# `@current_method_block_param` like any other `&block`, and extends
|
|
13
|
+
# `block_forward_expr` to forward the current method's anon-block
|
|
14
|
+
# slot when it sees a BlockArgumentNode with no expression.
|
|
15
|
+
|
|
16
|
+
# 1. Top-level outer/inner with anonymous & forwarding.
|
|
17
|
+
def outer(&)
|
|
18
|
+
inner(&)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def inner(&block)
|
|
22
|
+
block.call
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
outer { puts "1-top-level" }
|
|
26
|
+
|
|
27
|
+
# 2. Anonymous & with a body that does work before forwarding.
|
|
28
|
+
def with_prefix(label, &)
|
|
29
|
+
puts label
|
|
30
|
+
inner(&)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
with_prefix("2-prefix") { puts " body" }
|
|
34
|
+
|
|
35
|
+
# 3. Anonymous & on a class instance method, forwarding to another
|
|
36
|
+
# class instance method via typed-receiver dispatch.
|
|
37
|
+
class Outer
|
|
38
|
+
def kick(&)
|
|
39
|
+
sink(&)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def sink(&block)
|
|
43
|
+
block.call
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Outer.new.kick { puts "3-class-method" }
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Deep-nested array literals (3D and beyond). Spinel doesn't
|
|
2
|
+
# have a typed `<X>_ptr_array_ptr_array` slot — the second-level
|
|
3
|
+
# `[[1,2,3],[4,5,6]]` infers as `int_array_ptr_array` and the
|
|
4
|
+
# outer `[[[...]],[[...]]]` would naively box each element via
|
|
5
|
+
# `sp_box_ptr_array`, which erases the elem-type info and
|
|
6
|
+
# leaves the dispatch returning an unknown obj at the next `[]`
|
|
7
|
+
# read.
|
|
8
|
+
#
|
|
9
|
+
# Fix: when an array literal element is itself a typed
|
|
10
|
+
# ptr_array (or already poly_array) and the outer is
|
|
11
|
+
# poly_array, recompile the inner literal as poly_array so
|
|
12
|
+
# every level boxes via `sp_box_poly_array` / `sp_box_int_array`
|
|
13
|
+
# / etc. — the cls_id chain stays tagged and the poly-builtin
|
|
14
|
+
# dispatch recurses correctly through `arr[i][j][k]...`.
|
|
15
|
+
#
|
|
16
|
+
# The recursion in `compile_array_literal_as_poly` makes the
|
|
17
|
+
# fix dimension-agnostic — 3D, 4D, 5D, ... all work.
|
|
18
|
+
#
|
|
19
|
+
# Without the fix `read` returned 0 for every index (sp_box_nil
|
|
20
|
+
# fallback). With the fix it returns the right ints.
|
|
21
|
+
|
|
22
|
+
class H3
|
|
23
|
+
def initialize
|
|
24
|
+
@t = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
|
|
25
|
+
end
|
|
26
|
+
def read(i, j, k); @t[i][j][k]; end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
h3 = H3.new
|
|
30
|
+
puts h3.read(0, 0, 0) # 1
|
|
31
|
+
puts h3.read(0, 1, 1) # 5
|
|
32
|
+
puts h3.read(1, 0, 2) # 9
|
|
33
|
+
puts h3.read(1, 1, 2) # 12
|
|
34
|
+
|
|
35
|
+
# 4D — recursion handles arbitrary depth.
|
|
36
|
+
class H4
|
|
37
|
+
def initialize
|
|
38
|
+
@t = [[[[1, 2], [3, 4]], [[5, 6], [7, 8]]],
|
|
39
|
+
[[[9, 10], [11, 12]], [[13, 14], [15, 16]]]]
|
|
40
|
+
end
|
|
41
|
+
def read(i, j, k, l); @t[i][j][k][l]; end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
h4 = H4.new
|
|
45
|
+
puts h4.read(0, 0, 0, 0) # 1
|
|
46
|
+
puts h4.read(0, 1, 0, 1) # 6
|
|
47
|
+
puts h4.read(1, 0, 1, 0) # 11
|
|
48
|
+
puts h4.read(1, 1, 1, 1) # 16
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# `Array#clear` on typed arrays used to fall through the
|
|
2
|
+
# dispatcher and produce no C output, leaving the array
|
|
3
|
+
# unchanged. Zero the length (and `start` for IntArray, which
|
|
4
|
+
# uses a sliding window) so the next push refills from index 0.
|
|
5
|
+
|
|
6
|
+
# IntArray
|
|
7
|
+
ints = [1, 2, 3]
|
|
8
|
+
ints.clear
|
|
9
|
+
puts ints.length # 0
|
|
10
|
+
ints.push(7)
|
|
11
|
+
puts ints[0] # 7
|
|
12
|
+
|
|
13
|
+
# SymArray (shares IntArray internally)
|
|
14
|
+
syms = [:a, :b, :c]
|
|
15
|
+
syms.clear
|
|
16
|
+
puts syms.length # 0
|
|
17
|
+
|
|
18
|
+
# FloatArray
|
|
19
|
+
floats = [1.5, 2.5, 3.5]
|
|
20
|
+
floats.clear
|
|
21
|
+
puts floats.length # 0
|
|
22
|
+
|
|
23
|
+
# StrArray
|
|
24
|
+
strs = ["a", "b", "c"]
|
|
25
|
+
strs.clear
|
|
26
|
+
puts strs.length # 0
|
|
27
|
+
|
|
28
|
+
# PtrArray (array of objects)
|
|
29
|
+
class Box
|
|
30
|
+
attr_reader :n
|
|
31
|
+
def initialize(n); @n = n; end
|
|
32
|
+
end
|
|
33
|
+
boxes = [Box.new(1), Box.new(2)]
|
|
34
|
+
boxes.clear
|
|
35
|
+
puts boxes.length # 0
|
|
36
|
+
|
|
37
|
+
# PolyArray (mixed-type elements)
|
|
38
|
+
mixed = [1, "x", :sym, 4.5]
|
|
39
|
+
mixed.clear
|
|
40
|
+
puts mixed.length # 0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Array#concat used to silently miss the type-check on both poly_array
|
|
2
|
+
# and ptr_array — the loop never ran, so the receiver kept its
|
|
3
|
+
# original length. Both shapes regression-tested here.
|
|
4
|
+
|
|
5
|
+
# poly_array (heterogeneous)
|
|
6
|
+
a = [1, "x"]
|
|
7
|
+
a.concat([2, "y"])
|
|
8
|
+
puts a.length
|
|
9
|
+
|
|
10
|
+
# ptr_array (user objects)
|
|
11
|
+
class Bar
|
|
12
|
+
def initialize(x); @x = x; end
|
|
13
|
+
attr_accessor :x
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
b = [Bar.new(1)]
|
|
17
|
+
b.concat([Bar.new(2), Bar.new(3)])
|
|
18
|
+
puts b.length
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Array#each_with_object on poly_array and ptr_array used to silently
|
|
2
|
+
# miss the type-check; the loop body never ran. Both shapes covered.
|
|
3
|
+
|
|
4
|
+
# poly_array (heterogeneous)
|
|
5
|
+
n = 0
|
|
6
|
+
[1, "x"].each_with_object("") {|_e, _a| n += 1 }
|
|
7
|
+
puts n
|
|
8
|
+
|
|
9
|
+
# ptr_array (user objects)
|
|
10
|
+
class Bar
|
|
11
|
+
def initialize(x); @x = x; end
|
|
12
|
+
attr_accessor :x
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
m = 0
|
|
16
|
+
[Bar.new(1), Bar.new(2)].each_with_object("") {|_e, _a| m += 1 }
|
|
17
|
+
puts m
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# `arr.fill(val)` on a poly_array used to lower as
|
|
2
|
+
# `sp_PolyArray_set(arr, i, val)` with the raw scalar `val`. The
|
|
3
|
+
# storage is sp_RbVal — passing an unboxed int / str / float
|
|
4
|
+
# fails to compile (`incompatible type for argument 3 of
|
|
5
|
+
# sp_PolyArray_set`).
|
|
6
|
+
#
|
|
7
|
+
# Fix: wrap the value via `box_value_to_poly` first when the
|
|
8
|
+
# receiver is `poly_array`. Other typed-array fills (int / float
|
|
9
|
+
# / str / sym / ptr) keep their raw scalar path.
|
|
10
|
+
|
|
11
|
+
def make_arr
|
|
12
|
+
arr = [1, "two", 3.14] # heterogeneous → poly_array
|
|
13
|
+
arr.fill(42)
|
|
14
|
+
arr
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
p make_arr # [42, 42, 42]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Array#flat_map where the block returns a poly_array / ptr_array
|
|
2
|
+
# failed to type the result; the inferred receiver-array type clashed
|
|
3
|
+
# with the generated inner accumulator. Both shapes covered.
|
|
4
|
+
|
|
5
|
+
# poly_array
|
|
6
|
+
a = [1, "x"].flat_map { |pe| [pe, pe] }
|
|
7
|
+
puts a.length
|
|
8
|
+
|
|
9
|
+
# ptr_array
|
|
10
|
+
class Bar
|
|
11
|
+
def initialize(x); @x = x; end
|
|
12
|
+
attr_accessor :x
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
b = [Bar.new(1), Bar.new(2)].flat_map { |re| [re, re] }
|
|
16
|
+
puts b.length
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Array-keyed Hash. `entries[[a, b]] ||= ...` was broken because
|
|
2
|
+
# spinel's PolyPolyHash defaulted to pointer-identity comparison
|
|
3
|
+
# for SP_TAG_OBJ keys — every fresh `[a, b]` literal allocated a
|
|
4
|
+
# new IntArray, so identical-content keys never matched and the
|
|
5
|
+
# `||=` never deduped. The cache grew unboundedly and reads with
|
|
6
|
+
# a fresh `[a, b]` returned nil.
|
|
7
|
+
#
|
|
8
|
+
# Fix: extend the codegen-emitted sp_obj_hash_hook /
|
|
9
|
+
# sp_obj_eql_hook to handle SP_BUILTIN_INT_ARRAY with element-wise
|
|
10
|
+
# content hash + comparison. Two IntArray instances with the same
|
|
11
|
+
# elements now hash and eql? identically — array-keyed Hash
|
|
12
|
+
# behaves like CRuby's `Hash` with the [a,b]-style key idiom.
|
|
13
|
+
|
|
14
|
+
entries = {}
|
|
15
|
+
entries[[1, 2]] = "a"
|
|
16
|
+
entries[[3, 4]] = "b"
|
|
17
|
+
entries[[1, 2]] ||= "z" # already set, no overwrite
|
|
18
|
+
puts entries[[1, 2]] # "a"
|
|
19
|
+
puts entries[[3, 4]] # "b"
|
|
20
|
+
puts entries.length # 2
|
|
21
|
+
|
|
22
|
+
# Heterogeneous keys still work — int / IntArray / string mixed.
|
|
23
|
+
mixed = {}
|
|
24
|
+
mixed[42] = "int-key"
|
|
25
|
+
mixed[[5, 6, 7]] = "arr-key"
|
|
26
|
+
mixed[[5, 6, 7]] ||= "no-overwrite"
|
|
27
|
+
puts mixed[42] # int-key
|
|
28
|
+
puts mixed[[5, 6, 7]] # arr-key
|
|
29
|
+
puts mixed.length # 2
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# A user class with a method whose name overlaps an Array method (e.g.
|
|
2
|
+
# `def sample`, `def first`) used to compile to the Array dispatch even
|
|
3
|
+
# when the receiver wasn't an array. `array_c_prefix` falls back to
|
|
4
|
+
# `IntArray`, so e.g. `m.sample` on `sp_Mixer *` emitted
|
|
5
|
+
# `sp_IntArray_get(m, rand() % sp_IntArray_length(m))` and gcc rejected
|
|
6
|
+
# the pointer-type mismatch.
|
|
7
|
+
|
|
8
|
+
class Mixer
|
|
9
|
+
def sample
|
|
10
|
+
42
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
m = Mixer.new
|
|
15
|
+
puts m.sample
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
42
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# `Array.new(N) { block }` should pick its accumulator container
|
|
2
|
+
# from the block's return type, not collapse to IntArray. Without
|
|
3
|
+
# the fix, `Array.new(N) { _x = [0]; _x.clear; _x }` (the seed-int
|
|
4
|
+
# idiom for an empty-but-typed inner array) emits a flat IntArray
|
|
5
|
+
# at the C level, then later `<<` pushes silently cast pointers
|
|
6
|
+
# to ints — every read returns 0.
|
|
7
|
+
#
|
|
8
|
+
# The fix mirrors compile_map_expr's range / typed-container
|
|
9
|
+
# branch: infer the block tail's type and emit StrArray /
|
|
10
|
+
# FloatArray / PtrArray<X> / PolyArray accordingly. Three call
|
|
11
|
+
# sites need it (infer_type, infer_ivar_init_type,
|
|
12
|
+
# compile_constructor_expr) so the ivar widening pipeline stays
|
|
13
|
+
# consistent.
|
|
14
|
+
|
|
15
|
+
class C
|
|
16
|
+
def initialize
|
|
17
|
+
@typed = Array.new(4) { _a = [0]; _a.clear; _a }
|
|
18
|
+
@strs = Array.new(3) { |i| "row#{i}" }
|
|
19
|
+
@flts = Array.new(3) { |i| i.to_f * 0.5 }
|
|
20
|
+
end
|
|
21
|
+
def push_typed(i, v); @typed[i] << v; end
|
|
22
|
+
def get_typed(i, j); @typed[i][j]; end
|
|
23
|
+
def get_str(i); @strs[i]; end
|
|
24
|
+
def get_flt(i); @flts[i]; end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
c = C.new
|
|
28
|
+
c.push_typed(0, 100)
|
|
29
|
+
c.push_typed(0, 200)
|
|
30
|
+
c.push_typed(2, 999)
|
|
31
|
+
puts c.get_typed(0, 0) # 100
|
|
32
|
+
puts c.get_typed(0, 1) # 200
|
|
33
|
+
puts c.get_typed(2, 0) # 999
|
|
34
|
+
puts c.get_str(0) # row0
|
|
35
|
+
puts c.get_str(2) # row2
|
|
36
|
+
puts c.get_flt(0) # 0.0
|
|
37
|
+
puts c.get_flt(2) # 1.0
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# `Array.new(N) { [].dup }` returns an array of N empty-array
|
|
2
|
+
# inners. The static element type of `[]` is ambiguous — int_array
|
|
3
|
+
# is the natural default but if later pushes drop pointer-typed
|
|
4
|
+
# values (3-tuples, IntArrays, ...) into the inner, that fallback
|
|
5
|
+
# silently truncates the pointer to mrb_int and the cache is
|
|
6
|
+
# corrupt.
|
|
7
|
+
#
|
|
8
|
+
# After the fix, `Array.new(N) { [].dup }` (and `{ [] }`) emits
|
|
9
|
+
# each inner as a fresh sp_PolyArray. Pushes go through the
|
|
10
|
+
# sp_poly_shl runtime cls_id dispatch (any kind survives), and
|
|
11
|
+
# `arr[i][j]` reads back the boxed element with its real cls_id
|
|
12
|
+
# preserved. The outer Array.new returns `poly_array` so the
|
|
13
|
+
# whole structure is sp_PolyArray of sp_PolyArrays.
|
|
14
|
+
#
|
|
15
|
+
# Also covers the multi-write destructure poly RHS shape that
|
|
16
|
+
# arises naturally:
|
|
17
|
+
# `@a, @b, = entries[key]` against entries: poly_poly_hash whose
|
|
18
|
+
# values are 3-element arrays. compile_multi_write now recognizes
|
|
19
|
+
# val_t_local == "poly" and unboxes via cls_id-POLY_ARRAY check.
|
|
20
|
+
|
|
21
|
+
class C
|
|
22
|
+
def initialize
|
|
23
|
+
@inners = [Array.new(4) { [].dup }, Array.new(4) { [].dup }]
|
|
24
|
+
end
|
|
25
|
+
def add_tuple(b, i, io, ptr, shift)
|
|
26
|
+
entry = [io, ptr, shift]
|
|
27
|
+
@inners[b][i] << entry
|
|
28
|
+
end
|
|
29
|
+
def get_io(b, i, k); @inners[b][i][k][0]; end
|
|
30
|
+
def get_shift(b, i, k); @inners[b][i][k][2]; end
|
|
31
|
+
def len(b, i); @inners[b][i].length; end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
c = C.new
|
|
35
|
+
inner_a = [10, 20, 30]
|
|
36
|
+
inner_b = [40, 50, 60]
|
|
37
|
+
c.add_tuple(0, 0, 0x100, inner_a, 4)
|
|
38
|
+
c.add_tuple(0, 0, 0x200, inner_b, 6)
|
|
39
|
+
c.add_tuple(1, 2, 0x300, inner_a, 0)
|
|
40
|
+
puts c.get_io(0, 0, 0) # 256
|
|
41
|
+
puts c.get_shift(0, 0, 0) # 4
|
|
42
|
+
puts c.get_io(0, 0, 1) # 512
|
|
43
|
+
puts c.get_shift(0, 0, 1) # 6
|
|
44
|
+
puts c.get_io(1, 2, 0) # 768
|
|
45
|
+
puts c.len(0, 0) # 2
|
|
46
|
+
puts c.len(1, 2) # 1
|
|
47
|
+
puts c.len(0, 3) # 0
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Regression: Array#partition (block form) returns a tuple holding two
|
|
2
|
+
# inner arrays. The tuple's sp_gc_alloc was emitted with scan=NULL, so
|
|
3
|
+
# the inner arrays were swept while the tuple was still alive, and a
|
|
4
|
+
# subsequent allocation reused the freed memory — `parts[0].length`
|
|
5
|
+
# came back as the length of whatever object now sat there.
|
|
6
|
+
|
|
7
|
+
arr = [1, 2, 3, 4, 5, 6]
|
|
8
|
+
parts = arr.partition { |x| x.odd? }
|
|
9
|
+
|
|
10
|
+
# Force many GCs by allocating lots of GC-managed objects.
|
|
11
|
+
i = 0
|
|
12
|
+
while i < 200000
|
|
13
|
+
tmp = [1, 2, 3]
|
|
14
|
+
tmp.push(i)
|
|
15
|
+
i += 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
puts parts[0].length # 3
|
|
19
|
+
puts parts[1].length # 3
|
|
20
|
+
puts "done"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Array#+ used to fall through on poly_array / ptr_array — the result
|
|
2
|
+
# temp held its default 0 because the dispatcher's type-list omitted
|
|
3
|
+
# those shapes.
|
|
4
|
+
|
|
5
|
+
# poly_array
|
|
6
|
+
a = [1, "x"]
|
|
7
|
+
b = [2, "y"]
|
|
8
|
+
puts (a + b).length
|
|
9
|
+
|
|
10
|
+
# ptr_array
|
|
11
|
+
class Bar
|
|
12
|
+
def initialize(x); @x = x; end
|
|
13
|
+
attr_accessor :x
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
c = [Bar.new(1)]
|
|
17
|
+
d = [Bar.new(2)]
|
|
18
|
+
puts (c + d).length
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Array#rotate!(n): in-place left rotation by n positions.
|
|
2
|
+
# Previously the bang form was not dispatched at all and the codegen
|
|
3
|
+
# emitted a no-op, so `rotate!` left the array untouched.
|
|
4
|
+
|
|
5
|
+
# IntArray
|
|
6
|
+
ints = [1, 2, 3, 4, 5]
|
|
7
|
+
ints.rotate!(2)
|
|
8
|
+
ints.each { |i| puts i } # 3 4 5 1 2
|
|
9
|
+
|
|
10
|
+
# Negative n rotates right.
|
|
11
|
+
ints2 = [1, 2, 3, 4, 5]
|
|
12
|
+
ints2.rotate!(-1)
|
|
13
|
+
ints2.each { |i| puts i } # 5 1 2 3 4
|
|
14
|
+
|
|
15
|
+
# n larger than length wraps modulo len.
|
|
16
|
+
ints3 = [1, 2, 3]
|
|
17
|
+
ints3.rotate!(7)
|
|
18
|
+
ints3.each { |i| puts i } # 2 3 1
|
|
19
|
+
|
|
20
|
+
# Empty array is a no-op (no malloc, no crash).
|
|
21
|
+
empty = []
|
|
22
|
+
empty.rotate!(3)
|
|
23
|
+
puts empty.length # 0
|
|
24
|
+
|
|
25
|
+
# SymArray (shares the IntArray helper internally).
|
|
26
|
+
syms = [:a, :b, :c, :d]
|
|
27
|
+
syms.rotate!(1)
|
|
28
|
+
syms.each { |s| puts s } # b c d a
|
|
29
|
+
|
|
30
|
+
# FloatArray
|
|
31
|
+
floats = [1.5, 2.5, 3.5, 4.5]
|
|
32
|
+
floats.rotate!(2)
|
|
33
|
+
floats.each { |f| puts f } # 3.5 4.5 1.5 2.5
|
|
34
|
+
|
|
35
|
+
# StrArray
|
|
36
|
+
strs = ["a", "b", "c", "d"]
|
|
37
|
+
strs.rotate!(1)
|
|
38
|
+
strs.each { |s| puts s } # b c d a
|
|
39
|
+
|
|
40
|
+
# PtrArray (array of objects)
|
|
41
|
+
class Box
|
|
42
|
+
attr_reader :n
|
|
43
|
+
def initialize(n)
|
|
44
|
+
@n = n
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
boxes = [Box.new(10), Box.new(20), Box.new(30), Box.new(40)]
|
|
48
|
+
boxes.rotate!(2)
|
|
49
|
+
boxes.each { |b| puts b.n } # 30 40 10 20
|
|
50
|
+
|
|
51
|
+
# PolyArray (mixed-type elements)
|
|
52
|
+
mixed = [1, "x", :sym, 4.5]
|
|
53
|
+
mixed.rotate!(1)
|
|
54
|
+
mixed.each { |v| puts v } # x sym 4.5 1
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Array#shuffle / Array#shuffle! used to skip ptr_array. The
|
|
2
|
+
# dispatcher silently fell through, the result temp ended up `0`,
|
|
3
|
+
# and the runtime had no PtrArray shuffle helper to call anyway.
|
|
4
|
+
|
|
5
|
+
class Bar
|
|
6
|
+
def initialize(x); @x = x; end
|
|
7
|
+
attr_accessor :x
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
arr = [Bar.new(1), Bar.new(2), Bar.new(3)]
|
|
11
|
+
puts arr.shuffle.length
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3
|