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,50 @@
|
|
|
1
|
+
# `Integer#[N]` (bit-extraction) where the receiver was typed
|
|
2
|
+
# poly via cascading inference. Used to fall through to the
|
|
3
|
+
# SP_TAG_OBJ array dispatch in `emit_poly_builtin_dispatch`'s
|
|
4
|
+
# `[]` branch, leaving the result at the nil/0 default — so
|
|
5
|
+
# `int[i]` returned 0 for every i, and downstream
|
|
6
|
+
# `pc[8] == tmp[8] ? a : b` style page-bit checks always took
|
|
7
|
+
# the same-page branch.
|
|
8
|
+
|
|
9
|
+
class Holder
|
|
10
|
+
# Mixed-type ivar writes widen @x to poly. Reads return sp_RbVal
|
|
11
|
+
# even when the runtime value is concretely int.
|
|
12
|
+
def initialize
|
|
13
|
+
@x = "init"
|
|
14
|
+
@x = 0b10110100 # 180 — actual value at test time
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_reader :x
|
|
18
|
+
|
|
19
|
+
# Same-page check pattern: extract bit 8 from each poly-typed int.
|
|
20
|
+
def same_page?(a, b)
|
|
21
|
+
a[8] == b[8]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
h = Holder.new
|
|
26
|
+
v = h.x # `v` is poly here
|
|
27
|
+
|
|
28
|
+
# Static index, dynamic value. Without the fix, every output is 0.
|
|
29
|
+
puts v[0] # 0
|
|
30
|
+
puts v[1] # 0
|
|
31
|
+
puts v[2] # 1
|
|
32
|
+
puts v[3] # 0
|
|
33
|
+
puts v[4] # 1
|
|
34
|
+
puts v[5] # 1
|
|
35
|
+
puts v[6] # 0
|
|
36
|
+
puts v[7] # 1
|
|
37
|
+
|
|
38
|
+
# Dynamic index. Same buggy fallthrough.
|
|
39
|
+
i = 0
|
|
40
|
+
while i < 4
|
|
41
|
+
puts v[i]
|
|
42
|
+
i += 1
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Page-bit check: `0x100 | x` flips bit 8 on/off so the comparison
|
|
46
|
+
# meaningfully differs depending on input. With the bug both values
|
|
47
|
+
# get bit-8 == 0 (default), the comparison is always true, and
|
|
48
|
+
# branch-cycle counting collapses.
|
|
49
|
+
puts h.same_page?(h.x, h.x | 0x100) # false (bit 8 differs)
|
|
50
|
+
puts h.same_page?(h.x, h.x | 0x10) # true (bit 8 same — both 0)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Same operator-site auto-unbox, but for bit operators (`<<`,
|
|
2
|
+
# `>>`, `&`, `|`, `^`). int recv + poly arg previously failed C
|
|
3
|
+
# compile; the poly arg is now unboxed via .v.i.
|
|
4
|
+
|
|
5
|
+
# Heterogeneous poly_array of [user-class-with-[], IntArray] —
|
|
6
|
+
# the outer `arr[i]` dispatch returns poly, then `[j]` on the
|
|
7
|
+
# poly returns poly (since spinel statically types `[]` as poly).
|
|
8
|
+
class Bits
|
|
9
|
+
def [](i); [0xff, 0x0a, 0x10][i]; end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
arr = [Bits.new, [0xff, 0x0a, 0x10]]
|
|
13
|
+
|
|
14
|
+
# Each `arr[k][j]` is `int + poly` style: addr is int, the
|
|
15
|
+
# heterogeneous dispatch result is statically poly.
|
|
16
|
+
puts(1 << arr[1][1]) # 1 << 0x0a = 1024
|
|
17
|
+
puts(0xf0 & arr[1][0]) # 0xf0 & 0xff = 0xf0 = 240
|
|
18
|
+
puts(0x05 | arr[1][1]) # 0x05 | 0x0a = 0x0f = 15
|
|
19
|
+
puts(0xff ^ arr[1][2]) # 0xff ^ 0x10 = 0xef = 239
|
|
20
|
+
puts(arr[1][1] >> 1) # 0x0a >> 1 = 5 (recv-poly + arg-int already routes to sp_poly_shr)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# `<poly>.is_a?(Klass)` / `kind_of?` / `instance_of?` runtime
|
|
2
|
+
# dispatch. Spinel previously fell through to user-class dispatch
|
|
3
|
+
# only — the SP_TAG_INT / SP_TAG_STR / SP_TAG_FLT / SP_TAG_NIL /
|
|
4
|
+
# SP_TAG_BOOL / SP_TAG_SYM / built-in Array / Hash / Range cases
|
|
5
|
+
# were missing, so `is_a?(Integer)` against a poly slot always
|
|
6
|
+
# returned false and downstream branches took the wrong arm. The
|
|
7
|
+
# user-class dispatch also walked the wrong direction (recv->parent
|
|
8
|
+
# instead of any-descendant->ancestor).
|
|
9
|
+
#
|
|
10
|
+
# Repro: a heterogeneous poly array yields each element back as
|
|
11
|
+
# poly, then the type test routes it to the right branch. The
|
|
12
|
+
# trailing Bar.new must select the `is_a?(Bar)` arm AND the
|
|
13
|
+
# Foo.new before it must NOT match `is_a?(Bar)` (subclass-only).
|
|
14
|
+
|
|
15
|
+
class Foo
|
|
16
|
+
def name; "foo"; end
|
|
17
|
+
end
|
|
18
|
+
class Bar < Foo
|
|
19
|
+
def name; "bar"; end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
arr = [42, "hello", :sym, 1.5, nil, true, false, [1, 2], Foo.new, Bar.new]
|
|
23
|
+
arr.each do |x|
|
|
24
|
+
if x.is_a?(Integer)
|
|
25
|
+
puts "Integer #{x}"
|
|
26
|
+
elsif x.is_a?(String)
|
|
27
|
+
puts "String #{x}"
|
|
28
|
+
elsif x.is_a?(Symbol)
|
|
29
|
+
puts "Symbol #{x.to_s}"
|
|
30
|
+
elsif x.is_a?(Float)
|
|
31
|
+
puts "Float"
|
|
32
|
+
elsif x.is_a?(NilClass)
|
|
33
|
+
puts "Nil"
|
|
34
|
+
elsif x.is_a?(TrueClass)
|
|
35
|
+
puts "True"
|
|
36
|
+
elsif x.is_a?(FalseClass)
|
|
37
|
+
puts "False"
|
|
38
|
+
elsif x.is_a?(Array)
|
|
39
|
+
puts "Array"
|
|
40
|
+
elsif x.is_a?(Bar)
|
|
41
|
+
puts "Bar"
|
|
42
|
+
elsif x.is_a?(Foo)
|
|
43
|
+
puts "Foo"
|
|
44
|
+
else
|
|
45
|
+
puts "?"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Hash with Method-typed keys — the optcarrot @peeks/@pokes dedup
|
|
2
|
+
# pattern. Two `obj.method(:foo)` calls produce distinct Method
|
|
3
|
+
# instances but eql? as keys (same bound receiver + fn_ptr), so the
|
|
4
|
+
# `@cache[k] ||= k` cache stores only one entry for them.
|
|
5
|
+
|
|
6
|
+
class Cache
|
|
7
|
+
def initialize
|
|
8
|
+
@h = {}
|
|
9
|
+
end
|
|
10
|
+
def add(k)
|
|
11
|
+
@h[k] ||= k
|
|
12
|
+
end
|
|
13
|
+
def has?(k)
|
|
14
|
+
!@h[k].nil?
|
|
15
|
+
end
|
|
16
|
+
def size
|
|
17
|
+
@h.size
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class M
|
|
22
|
+
def self.foo; end
|
|
23
|
+
def self.bar; end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
c = Cache.new
|
|
27
|
+
m1 = M.method(:foo)
|
|
28
|
+
c.add(m1)
|
|
29
|
+
puts c.has?(m1) # true (same instance round-trips)
|
|
30
|
+
puts c.has?(M.method(:bar)) # false (different fn_ptr)
|
|
31
|
+
|
|
32
|
+
# Two distinct Method instances for the same (receiver, fn_ptr)
|
|
33
|
+
# hash and eql? identically, so the cache stays at size 1.
|
|
34
|
+
c.add(M.method(:foo))
|
|
35
|
+
puts c.size # 1
|
|
36
|
+
puts c.has?(M.method(:foo)) # true via eql? (m1 returned for the
|
|
37
|
+
# query Method instance)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Heterogeneous-key Hash through the full reassign-and-store pipeline.
|
|
2
|
+
# Mirrors optcarrot's CPU#add_mappings(addr, peek, poke):
|
|
3
|
+
# peek = @peeks[peek] ||= peek
|
|
4
|
+
# where peek can be either a Method or a non-Method object — the param
|
|
5
|
+
# slot widens to poly so the `||=` lookup result flows back into the
|
|
6
|
+
# same local without unboxing.
|
|
7
|
+
|
|
8
|
+
class Pipeline
|
|
9
|
+
def initialize
|
|
10
|
+
@peeks = {}
|
|
11
|
+
@stored = []
|
|
12
|
+
end
|
|
13
|
+
# `item` widens to poly across the call sites below (Method,
|
|
14
|
+
# IntArray) so the param is sp_RbVal — the dedup reassignment
|
|
15
|
+
# `item = @peeks[item] ||= item` works without re-typing the slot.
|
|
16
|
+
def add(item)
|
|
17
|
+
item = @peeks[item] ||= item
|
|
18
|
+
@stored.push(item)
|
|
19
|
+
end
|
|
20
|
+
def cache_size
|
|
21
|
+
@peeks.size
|
|
22
|
+
end
|
|
23
|
+
def stored_count
|
|
24
|
+
@stored.length
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Source
|
|
29
|
+
def self.read; 42; end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
p = Pipeline.new
|
|
33
|
+
m = Source.method(:read)
|
|
34
|
+
arr = [1, 2, 3]
|
|
35
|
+
p.add(m) # cache: {m => m}
|
|
36
|
+
p.add(arr) # cache: {m => m, arr => arr}
|
|
37
|
+
p.add(Source.method(:read)) # eql? to m → cache stays size 2
|
|
38
|
+
p.add(arr) # identity hit → size still 2
|
|
39
|
+
puts p.cache_size # 2
|
|
40
|
+
puts p.stored_count # 4 (every call appends)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Polymorphic method dispatch must pass arguments through to the
|
|
2
|
+
# selected class's method. Before this fix, `compile_poly_method_call`
|
|
3
|
+
# emitted `sp_<Class>_<method>((sp_<Class> *)recv.v.p)` with no
|
|
4
|
+
# argument list — the call-site arguments were dropped on the floor.
|
|
5
|
+
|
|
6
|
+
class Doubler
|
|
7
|
+
def call(x)
|
|
8
|
+
x * 2
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Tripler
|
|
13
|
+
def call(x)
|
|
14
|
+
x * 3
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def apply(a, x)
|
|
19
|
+
a.call(x)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
puts apply(Doubler.new, 5)
|
|
23
|
+
puts apply(Tripler.new, 5)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Poly dispatch where user classes disagree on the method's return
|
|
2
|
+
# type. `Foo#name` returns int, `Bar#name` returns string. The result
|
|
3
|
+
# of `a.name` is genuinely polymorphic — the dispatcher must use
|
|
4
|
+
# sp_RbVal as the result type and box each branch's return value.
|
|
5
|
+
|
|
6
|
+
class Foo
|
|
7
|
+
def name
|
|
8
|
+
42
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Bar
|
|
13
|
+
def name
|
|
14
|
+
"bar"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def show(a)
|
|
19
|
+
a.name
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
puts show(Foo.new)
|
|
23
|
+
puts show(Bar.new)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Issue #351: sister-to-#341. After #341 widened the per-class
|
|
2
|
+
# `def [](k)` parameter to `sp_RbVal` (poly) when callers pass
|
|
3
|
+
# heterogeneous key types, compile_poly_method_call's per-class
|
|
4
|
+
# dispatch arm passed the raw call-site value (`const char *`,
|
|
5
|
+
# `mrb_int`, ...) directly to the `sp_RbVal` parameter — gcc
|
|
6
|
+
# errored `incompatible type for argument 2 of 'sp_<C>__aref'`.
|
|
7
|
+
#
|
|
8
|
+
# Fix: at the per-arm emit, when the arm's ptype is `poly` (base
|
|
9
|
+
# type) but the call-site arg's type is concrete, wrap the arg
|
|
10
|
+
# expression in `box_value_to_poly(arg_type, val)` so the
|
|
11
|
+
# call-site value reaches the slot pre-boxed.
|
|
12
|
+
#
|
|
13
|
+
# Surfaced via Roundhouse's view-helper shape:
|
|
14
|
+
# `def field_for(model, field); model[field]; end` where model is
|
|
15
|
+
# poly{Article, Comment, HWIA, Parameters} and field is Symbol.
|
|
16
|
+
|
|
17
|
+
class A
|
|
18
|
+
def [](k)
|
|
19
|
+
"from-A"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class B
|
|
24
|
+
def [](k)
|
|
25
|
+
"from-B"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Two callers with different key types — forces the union to
|
|
30
|
+
# widen sp_<C>__aref's lv_k to sp_RbVal across A and B.
|
|
31
|
+
def lookup_str(receiver, key)
|
|
32
|
+
receiver[key]
|
|
33
|
+
end
|
|
34
|
+
puts lookup_str(A.new, "alpha")
|
|
35
|
+
puts lookup_str(B.new, "beta")
|
|
36
|
+
|
|
37
|
+
def lookup_sym(receiver, key)
|
|
38
|
+
receiver[key]
|
|
39
|
+
end
|
|
40
|
+
puts lookup_sym(A.new, :alpha)
|
|
41
|
+
puts lookup_sym(B.new, :beta)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Issue #341: user-defined `def [](k)` got its parameter type
|
|
2
|
+
# inferred as `mrb_int` regardless of caller arg types. When the
|
|
3
|
+
# receiver was poly (e.g. a method param widened to accept multiple
|
|
4
|
+
# user classes) and callers passed a String key, the per-class
|
|
5
|
+
# arms emitted by compile_poly_method_call called each class's
|
|
6
|
+
# C function with `const char *` arg → Wint-conversion error
|
|
7
|
+
# under -Werror, or hard incompatible-pointer error.
|
|
8
|
+
#
|
|
9
|
+
# A second symptom: the SP_TAG_INT branch of compile_poly_method_call
|
|
10
|
+
# emitted `(recv.v.i >> key) & 1` unconditionally, which is invalid
|
|
11
|
+
# C when `key` isn't an int. The same shape applies to the built-in
|
|
12
|
+
# array dispatches in emit_poly_builtin_dispatch (sp_IntArray_get
|
|
13
|
+
# etc. all expect `mrb_int` keys).
|
|
14
|
+
#
|
|
15
|
+
# Fix:
|
|
16
|
+
# 1. scan_new_calls' receiver-method widening adds a poly arm:
|
|
17
|
+
# walk every user class that defines `mname` and unify each
|
|
18
|
+
# class's ptypes with the call site's arg types.
|
|
19
|
+
# 2. compile_poly_method_call gates the int-bit-extract emit on
|
|
20
|
+
# arg type being int or poly.
|
|
21
|
+
# 3. emit_poly_builtin_dispatch's `[]` block also gates on int/poly
|
|
22
|
+
# key — for non-int keys the built-in arms are unreachable and
|
|
23
|
+
# emitting them produces the same Wint-conversion warnings.
|
|
24
|
+
|
|
25
|
+
class A
|
|
26
|
+
def [](k)
|
|
27
|
+
"from-A:" + k
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class B
|
|
32
|
+
def [](k)
|
|
33
|
+
"from-B:" + k
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def lookup(receiver, key)
|
|
38
|
+
receiver[key]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
puts lookup(A.new, "alpha")
|
|
42
|
+
puts lookup(B.new, "beta")
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `compile_bracket_assign` had no `rt == "poly"` branch. When an
|
|
2
|
+
# ivar slot widens to plain `poly` (sp_RbVal — wider than
|
|
3
|
+
# poly_array, set by `finalize_ivar_heterogeneity` because of
|
|
4
|
+
# multiple distinct non-array writes), `@arr[i] = v` falls through
|
|
5
|
+
# every typed branch and emits *nothing* — the assignment silently
|
|
6
|
+
# drops from generated C.
|
|
7
|
+
#
|
|
8
|
+
# Trigger: @arr is observed as int_array (`[nil] * N`) AND as a
|
|
9
|
+
# scalar (string, int) — finalize collapses to plain `poly`. Then
|
|
10
|
+
# `@arr[i] = v` should still write to the underlying storage, but
|
|
11
|
+
# without the poly arm spinel emits zero code for the assignment.
|
|
12
|
+
|
|
13
|
+
class C
|
|
14
|
+
def init_arr(n)
|
|
15
|
+
@arr = [nil] * n # int_array observation
|
|
16
|
+
@arr[0] = 100
|
|
17
|
+
end
|
|
18
|
+
def init_str
|
|
19
|
+
@arr = "scalar" # string observation — widens slot to poly
|
|
20
|
+
end
|
|
21
|
+
def init_int
|
|
22
|
+
@arr = 42 # int observation
|
|
23
|
+
end
|
|
24
|
+
def at(i)
|
|
25
|
+
@arr[i]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
c = C.new
|
|
30
|
+
c.init_arr(3)
|
|
31
|
+
puts c.at(0) # post-write: 100 (master: 0 — write dropped)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
100
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `<poly>.each` runtime dispatch on cls_id. The compile_each_block
|
|
2
|
+
# handler previously bailed when the receiver type was `poly` (no
|
|
3
|
+
# matching `if rt == "..."` branch), so a method body that ends in
|
|
4
|
+
# `iterable.each do |a| ... end` over a poly slot silently dropped
|
|
5
|
+
# the iteration.
|
|
6
|
+
#
|
|
7
|
+
# Repro: an ivar `@store` widened to poly via two distinct array
|
|
8
|
+
# shapes (an int_array and a poly_array) is iterated via `.each`.
|
|
9
|
+
# Spinel previously emitted no loop at all — the body never ran.
|
|
10
|
+
# The block param `a` is delivered as sp_RbVal (the widest fit
|
|
11
|
+
# across the cls_id arms).
|
|
12
|
+
|
|
13
|
+
class C
|
|
14
|
+
def store_int_array
|
|
15
|
+
@store = [10, 20, 30]
|
|
16
|
+
end
|
|
17
|
+
def store_poly_array
|
|
18
|
+
@store = [nil] * 3
|
|
19
|
+
@store[0] = "a"
|
|
20
|
+
@store[1] = "b"
|
|
21
|
+
@store[2] = "c"
|
|
22
|
+
end
|
|
23
|
+
def visit
|
|
24
|
+
@store.each do |x|
|
|
25
|
+
puts x.to_s
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
c = C.new
|
|
31
|
+
c.store_int_array
|
|
32
|
+
c.visit
|
|
33
|
+
puts "---"
|
|
34
|
+
c.store_poly_array
|
|
35
|
+
c.visit
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Issue #118: a method that returns instances of two or more value-
|
|
2
|
+
# type-eligible classes per branch used to crash the C compile. Both
|
|
3
|
+
# A and B detected as value-type (no attr_writer / no mutator) →
|
|
4
|
+
# `sp_A_new(...)` / `sp_B_new(...)` returned the struct by value →
|
|
5
|
+
# `sp_box_obj(struct, ci)` tried to put a struct into `sp_RbVal.v.p`
|
|
6
|
+
# (`void *`), and the unboxing dispatch passed `void *` to a method
|
|
7
|
+
# taking its receiver by value.
|
|
8
|
+
#
|
|
9
|
+
# Fix: detect_poly_returned_types collects every class constructed
|
|
10
|
+
# inside a poly-returning method and excludes those classes from the
|
|
11
|
+
# value-type optimization, so they stay heap-allocated and the
|
|
12
|
+
# existing poly-return / sp_RbVal plumbing handles them as pointers.
|
|
13
|
+
|
|
14
|
+
class A
|
|
15
|
+
def initialize(v); @v = v; end
|
|
16
|
+
def label; "A:" + @v; end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class B
|
|
20
|
+
def initialize(v); @v = v; end
|
|
21
|
+
def label; "B:" + @v; end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def pick(flag)
|
|
25
|
+
if flag
|
|
26
|
+
A.new("yes")
|
|
27
|
+
else
|
|
28
|
+
B.new("no")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
puts pick(true).label # A:yes
|
|
33
|
+
puts pick(false).label # B:no
|
|
34
|
+
|
|
35
|
+
# A `case`/`when` poly return — same shape, different control flow.
|
|
36
|
+
def by_kind(k)
|
|
37
|
+
case k
|
|
38
|
+
when 0 then A.new("zero")
|
|
39
|
+
when 1 then B.new("one")
|
|
40
|
+
else A.new("many")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
puts by_kind(0).label # A:zero
|
|
45
|
+
puts by_kind(1).label # B:one
|
|
46
|
+
puts by_kind(9).label # A:many
|
|
47
|
+
|
|
48
|
+
# Method invocation that returns a different type per class — the
|
|
49
|
+
# poly receiver dispatches through the cls_id table generated for
|
|
50
|
+
# explicit `def`-defined methods on each class.
|
|
51
|
+
class P
|
|
52
|
+
def initialize(n); @n = n; end
|
|
53
|
+
def double; @n * 2; end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class Q
|
|
57
|
+
def initialize(n); @n = n; end
|
|
58
|
+
def double; @n + 100; end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def numeric(flag)
|
|
62
|
+
flag ? P.new(7) : Q.new(7)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
puts numeric(true).double # 14
|
|
66
|
+
puts numeric(false).double # 107
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Polymorphic dispatch where the called method dereferences `self`.
|
|
2
|
+
# `cls_id` used to share memory with `v.p` inside the sp_RbVal union,
|
|
3
|
+
# so writing cls_id after v.p clobbered the low 32 bits of the pointer.
|
|
4
|
+
# Methods that touch instance fields then crashed (SIGSEGV).
|
|
5
|
+
# Methods that did not touch self happened to work, masking the bug.
|
|
6
|
+
|
|
7
|
+
class C
|
|
8
|
+
attr_accessor :n
|
|
9
|
+
def initialize(n)
|
|
10
|
+
@n = n
|
|
11
|
+
end
|
|
12
|
+
def name
|
|
13
|
+
@n.to_s
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class D
|
|
18
|
+
def name
|
|
19
|
+
"other"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def show(o)
|
|
24
|
+
o.name
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
puts show(C.new(42))
|
|
28
|
+
puts show(D.new)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `<<` on a poly recv used to always lower to sp_poly_shl, which
|
|
2
|
+
# was Integer-bit-shift only. An IntArray boxed into a poly slot
|
|
3
|
+
# (e.g. an ivar that the type-inference passes widened to poly
|
|
4
|
+
# because it received both nil and an array) had its `<<` push
|
|
5
|
+
# silently turn into a bit-shift of the encoded pointer/length,
|
|
6
|
+
# dropping the rhs.
|
|
7
|
+
#
|
|
8
|
+
# After the fix, sp_poly_shl dispatches by recv cls_id and invokes
|
|
9
|
+
# the matching Array#<< push. Falls through to bit-shift only when
|
|
10
|
+
# the recv is a non-array (genuine Integer<<int).
|
|
11
|
+
|
|
12
|
+
class C
|
|
13
|
+
def initialize
|
|
14
|
+
# `nil` then concrete-array writes widen @v to poly (Issue #130
|
|
15
|
+
# "definite int/nil + obj → poly"). Once poly, the runtime
|
|
16
|
+
# carries cls_id INT_ARRAY at access time.
|
|
17
|
+
@v = nil
|
|
18
|
+
@v = [10, 20, 30]
|
|
19
|
+
end
|
|
20
|
+
def push(x); @v << x; end
|
|
21
|
+
def length; @v.length; end
|
|
22
|
+
def get(i); @v[i]; end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
c = C.new
|
|
26
|
+
c.push(99)
|
|
27
|
+
c.push(88)
|
|
28
|
+
puts c.length # 5
|
|
29
|
+
puts c.get(0) # 10
|
|
30
|
+
puts c.get(3) # 99
|
|
31
|
+
puts c.get(4) # 88
|
|
32
|
+
|
|
33
|
+
# Bit-shift on genuine Integer recv still works (the fall-through).
|
|
34
|
+
x = 1
|
|
35
|
+
puts x << 3 # 8
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# `compile_slice_assign` had no `rt == "poly"` arm; the
|
|
2
|
+
# fall-through used arg[1] (the slice length) as the assignment
|
|
3
|
+
# value and silently dropped the rhs entirely.
|
|
4
|
+
#
|
|
5
|
+
# Trigger: `arr[i, n] = src` where arr's slot type is plain poly
|
|
6
|
+
# (widened via heterogeneous writes).
|
|
7
|
+
|
|
8
|
+
class C
|
|
9
|
+
def init_arr
|
|
10
|
+
@arr = [10, 20, 30, 40, 50]
|
|
11
|
+
end
|
|
12
|
+
def init_str
|
|
13
|
+
@arr = "scalar" # widens slot to poly
|
|
14
|
+
end
|
|
15
|
+
def replace
|
|
16
|
+
@arr[1, 2] = [99, 88]
|
|
17
|
+
end
|
|
18
|
+
def at(i); @arr[i]; end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
c = C.new
|
|
22
|
+
c.init_arr
|
|
23
|
+
c.replace
|
|
24
|
+
puts c.at(0)
|
|
25
|
+
puts c.at(1)
|
|
26
|
+
puts c.at(2)
|