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,46 @@
|
|
|
1
|
+
# Issue #314 follow-up: `Mod.accessor.method(args)` (the
|
|
2
|
+
# module-singleton-accessor dispatch from #126/#304) emitted
|
|
3
|
+
# call-site args with raw `compile_expr` (no boxing). When the
|
|
4
|
+
# resolved candidate's per-arg ptype was widened to `poly` (e.g.
|
|
5
|
+
# via #304's cross-class unification), but the caller passed an
|
|
6
|
+
# int/string at the specific call site, the C arg type didn't
|
|
7
|
+
# match the ptype slot — Wint-conversion / hard
|
|
8
|
+
# incompatible-pointer-conversion.
|
|
9
|
+
#
|
|
10
|
+
# Fix: in compile_call_expr's module-accessor branch, look up
|
|
11
|
+
# the resolved candidate's ptypes and box each arg through
|
|
12
|
+
# box_expr_to_poly when the target ptype is poly.
|
|
13
|
+
#
|
|
14
|
+
# Companion: scan_new_calls' #304 widening also gained a
|
|
15
|
+
# parallel branch for module candidates (`<Mod>_cls_<m>` stored
|
|
16
|
+
# in @meth_*) so the per-class unify reaches them.
|
|
17
|
+
#
|
|
18
|
+
# Surfaced via Roundhouse's `ActiveRecord.adapter.update(table,
|
|
19
|
+
# @id, attrs)` — `@id` widened to poly across heterogeneous
|
|
20
|
+
# subclasses, but the call site emitted `lv_id` (sp_RbVal) into
|
|
21
|
+
# `InMemoryAdapter.update`'s pre-widening `mrb_int lv_id` slot.
|
|
22
|
+
|
|
23
|
+
module Backend
|
|
24
|
+
class << self
|
|
25
|
+
attr_accessor :db
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module Storage
|
|
30
|
+
module_function
|
|
31
|
+
def fetch(id)
|
|
32
|
+
# Just round-trip the id through to_s + length so the
|
|
33
|
+
# method body works for both int and String inputs.
|
|
34
|
+
id.to_s.length
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Backend.db = Storage
|
|
39
|
+
|
|
40
|
+
# Two call sites with different types — without #304 widening
|
|
41
|
+
# reaching the module candidate, only the first caller's type
|
|
42
|
+
# pinned the ptype; the second hit a C arg-type mismatch. With
|
|
43
|
+
# the widening + boxing fix, the ptype unifies to poly and both
|
|
44
|
+
# call sites box their arg through sp_box_int / sp_box_str.
|
|
45
|
+
puts Backend.db.fetch(42) # 2
|
|
46
|
+
puts Backend.db.fetch("alpha") # 5
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Issue #127: a module-level singleton method (`module M; def self.X; ... end; end`)
|
|
2
|
+
# whose body returns a non-int value used to be typed as `mrb_int` at every
|
|
3
|
+
# call site. Capturing to a local emitted `mrb_int = const char *` (compile
|
|
4
|
+
# error under -Werror); inline `puts M.X` compiled but printed the pointer
|
|
5
|
+
# as an integer. The class form (same shape inside `class C`) already worked.
|
|
6
|
+
# Fix is in `infer_constant_recv_type`: walk `@meth_return_types` for
|
|
7
|
+
# `<Module>_cls_<method>` the same way the class branch walks `@cls_cmeth_returns`.
|
|
8
|
+
|
|
9
|
+
# 1. Module + def self + String return + local capture — the failing shape.
|
|
10
|
+
module M1
|
|
11
|
+
def self.greet
|
|
12
|
+
"hello"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
s = M1.greet
|
|
17
|
+
puts s # hello
|
|
18
|
+
|
|
19
|
+
# 2. Module + def self + String return + inline puts — same root, different consumer.
|
|
20
|
+
module M2
|
|
21
|
+
def self.greet
|
|
22
|
+
"world"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
puts M2.greet # world
|
|
27
|
+
|
|
28
|
+
# 3. Module + def self + Float return — non-int isn't string-specific.
|
|
29
|
+
module M3
|
|
30
|
+
def self.pi
|
|
31
|
+
3.14
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
puts M3.pi # 3.14
|
|
36
|
+
|
|
37
|
+
# 4. Class + def self + String return — the path that already worked. Regression guard.
|
|
38
|
+
class C1
|
|
39
|
+
def self.greet
|
|
40
|
+
"from class"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
t = C1.greet
|
|
45
|
+
puts t # from class
|
|
46
|
+
|
|
47
|
+
# 5. Top-level def returning String — separate inference path. Regression guard.
|
|
48
|
+
def top_greet
|
|
49
|
+
"top"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
u = top_greet
|
|
53
|
+
puts u # top
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Issue #333: a module-level array constant initialized as an empty
|
|
2
|
+
# literal (`LOG = []`) was typed as `sp_IntArray *`, regardless of
|
|
3
|
+
# how it was used. A later `LOG << some_hash` then emitted
|
|
4
|
+
# `sp_IntArray_push(cst_M_LOG, hash_ptr)`, mistyping the pointer as
|
|
5
|
+
# mrb_int.
|
|
6
|
+
#
|
|
7
|
+
# Fix: extend the existing `refine_module_ivar_types` pass (which
|
|
8
|
+
# already handled `@slots = {}` shape per #303) to also walk
|
|
9
|
+
# `ConstantWriteNode` declarations like `LOG = []`. The companion
|
|
10
|
+
# scanner `scan_module_const_writes` walks the module's class
|
|
11
|
+
# methods for `LOG << v` / `LOG[k] = v` / `LOG.push(v)` shapes
|
|
12
|
+
# rooted at a `ConstantReadNode` receiver. Body locals (`entry =
|
|
13
|
+
# {...}; LOG << entry`) are also declared in the temporary scope so
|
|
14
|
+
# `infer_type` resolves the pushed value's actual hash/obj type
|
|
15
|
+
# instead of the int default.
|
|
16
|
+
#
|
|
17
|
+
# Surfaced via Roundhouse's `module Broadcasts; LOG = []; ... LOG <<
|
|
18
|
+
# entry` pattern.
|
|
19
|
+
|
|
20
|
+
module Broadcasts
|
|
21
|
+
module_function
|
|
22
|
+
LOG = []
|
|
23
|
+
|
|
24
|
+
def record(action)
|
|
25
|
+
entry = { action: action, target: "x" }
|
|
26
|
+
LOG << entry
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def size
|
|
30
|
+
LOG.length
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Broadcasts.record(:append)
|
|
35
|
+
Broadcasts.record(:replace)
|
|
36
|
+
puts Broadcasts.size # 2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Issue #304: module-dispatch ternary call sites
|
|
2
|
+
# (`Disp.adapter.method(args)` where Disp.adapter resolves to N
|
|
3
|
+
# candidate classes via the module-singleton-accessor table) used
|
|
4
|
+
# to leave the candidates' class-method params at their pre-widen
|
|
5
|
+
# narrow type even when the only caller passed a poly value. The
|
|
6
|
+
# emitted ternary would type-mismatch each arm.
|
|
7
|
+
#
|
|
8
|
+
# Two fixes: (1) module_sentinel now distinguishes class candidates
|
|
9
|
+
# (was returning 0 for class names looked up against the module
|
|
10
|
+
# table only — every ternary arm ended up testing `slot == 0` and
|
|
11
|
+
# the dispatch always picked the first candidate); (2) scan_new_calls
|
|
12
|
+
# walks the `Disp.adapter.update(@id)` chain shape and unifies the
|
|
13
|
+
# args' types into every candidate's `@cls_cmeth_ptypes`.
|
|
14
|
+
#
|
|
15
|
+
# Sister to #207 / #286 / #287 — same family of "widening must
|
|
16
|
+
# propagate across the dispatch path."
|
|
17
|
+
|
|
18
|
+
class A
|
|
19
|
+
def self.update(id)
|
|
20
|
+
id
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class B
|
|
25
|
+
def self.update(id)
|
|
26
|
+
id
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module Disp
|
|
31
|
+
class << self
|
|
32
|
+
attr_accessor :adapter
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class C
|
|
37
|
+
def initialize
|
|
38
|
+
@id = 0
|
|
39
|
+
end
|
|
40
|
+
def write_str(s); @id = s; end # widens @id to poly per #247
|
|
41
|
+
def save
|
|
42
|
+
Disp.adapter.update(@id) # ternary-dispatched: poly arg
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if ARGV.length > 0
|
|
47
|
+
Disp.adapter = A
|
|
48
|
+
else
|
|
49
|
+
Disp.adapter = B
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
c = C.new
|
|
53
|
+
c.write_str("hi")
|
|
54
|
+
c.save # no output expected; just compile
|
|
55
|
+
puts "ok"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ok
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# `module_function` in a module body installs the subsequent
|
|
2
|
+
# `def name` as both an instance method (for include-mixin)
|
|
3
|
+
# and a class method (`Mod.name`). Spinel only models the
|
|
4
|
+
# class-method form here.
|
|
5
|
+
#
|
|
6
|
+
# The namespace-resolution bug surfaces independently of
|
|
7
|
+
# `module_function`: any method body inside a module needs
|
|
8
|
+
# `current_lexical_scope_name` set so that bare class refs
|
|
9
|
+
# (`Box.new`) walk up via `resolve_const_read_name` to find
|
|
10
|
+
# the qualified `Outer_Box`.
|
|
11
|
+
#
|
|
12
|
+
# Both fixes ride together: register `def name` after
|
|
13
|
+
# `module_function` as `Mod_cls_name`, and pin
|
|
14
|
+
# `@current_method_name` while iterating top-level methods so
|
|
15
|
+
# the body's class-ref lookups peel `<Mod>_cls_<m>` correctly.
|
|
16
|
+
|
|
17
|
+
module Outer
|
|
18
|
+
module Helper
|
|
19
|
+
module_function
|
|
20
|
+
def small; [1, 2, 3]; end
|
|
21
|
+
def medium; [4, 5, 6, 7]; end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Conf
|
|
25
|
+
def initialize(flag)
|
|
26
|
+
@flag = flag
|
|
27
|
+
@arr = []
|
|
28
|
+
@arr << 0 # force heap layout (sp_Outer_Conf *)
|
|
29
|
+
end
|
|
30
|
+
attr_reader :flag
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Box
|
|
34
|
+
def initialize(conf)
|
|
35
|
+
@c = conf
|
|
36
|
+
@arr = []
|
|
37
|
+
@arr << 0
|
|
38
|
+
end
|
|
39
|
+
attr_reader :c
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
module Builder
|
|
43
|
+
# `def self.X` form — the bare `Box.new` inside walks the
|
|
44
|
+
# lexical scope to resolve `Outer_Box`.
|
|
45
|
+
def self.make(conf)
|
|
46
|
+
Box.new(conf)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# module_function dispatch.
|
|
52
|
+
puts Outer::Helper.small.length # 3
|
|
53
|
+
puts Outer::Helper.medium.length # 4
|
|
54
|
+
|
|
55
|
+
# Module class method body that references a sibling class
|
|
56
|
+
# bare-named — used to fail with "unknown type name 'sp_Box'".
|
|
57
|
+
b = Outer::Builder.make(Outer::Conf.new(true))
|
|
58
|
+
puts b.c.flag # true
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Issue #303: a module ivar initialized to an empty hash literal
|
|
2
|
+
# (`@slots = {}`) used to freeze its inferred type as `str_int_hash`
|
|
3
|
+
# (the empty-hash default) even when the module's class methods
|
|
4
|
+
# wrote a sym → string mapping into it. Result: the storage decl
|
|
5
|
+
# said `sp_StrIntHash *` but every `set` / `get` site emitted
|
|
6
|
+
# typed-mismatched calls (sym key into string-key hash, string
|
|
7
|
+
# value into int-value hash).
|
|
8
|
+
#
|
|
9
|
+
# Fix: a refinement pass in generate_code (after param inference
|
|
10
|
+
# stabilizes) walks each module's class-method bodies for
|
|
11
|
+
# `@<iname>[k] = v` writes and picks the most specific hash shape
|
|
12
|
+
# from the observed key + value types. Same idea for arrays via
|
|
13
|
+
# `@<iname> << v` / `@<iname>.push(v)`.
|
|
14
|
+
|
|
15
|
+
module M
|
|
16
|
+
@slots = {}
|
|
17
|
+
|
|
18
|
+
def self.set(k, v)
|
|
19
|
+
@slots[k] = v
|
|
20
|
+
nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.get(k)
|
|
24
|
+
@slots[k] || ""
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.size
|
|
28
|
+
@slots.length
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
M.set(:foo, "bar")
|
|
33
|
+
M.set(:baz, "qux")
|
|
34
|
+
puts M.get(:foo) # bar
|
|
35
|
+
puts M.get(:baz) # qux
|
|
36
|
+
puts M.get(:missing) # (empty default)
|
|
37
|
+
puts M.size # 2
|
|
38
|
+
|
|
39
|
+
# Empty array literal — same refinement applies via `<<` writes.
|
|
40
|
+
module N
|
|
41
|
+
@items = []
|
|
42
|
+
|
|
43
|
+
def self.add(s)
|
|
44
|
+
@items << s
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.read(i)
|
|
48
|
+
@items[i]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.size
|
|
52
|
+
@items.length
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
N.add("alpha")
|
|
57
|
+
N.add("beta")
|
|
58
|
+
N.add("gamma")
|
|
59
|
+
puts N.size # 3
|
|
60
|
+
puts N.read(0) # alpha
|
|
61
|
+
puts N.read(2) # gamma
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Test: relative ConstantPath class/module definitions inside a module.
|
|
2
|
+
|
|
3
|
+
module M
|
|
4
|
+
class A
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class A::B
|
|
8
|
+
def value
|
|
9
|
+
10
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module N
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module N::P
|
|
17
|
+
class C
|
|
18
|
+
def value
|
|
19
|
+
30
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
puts M::A::B.new.value
|
|
26
|
+
puts M::N::P::C.new.value
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Issue #126 Stage 1: a module value assigned to a module-level
|
|
2
|
+
# `class << self; attr_accessor :x; end` accessor used to read back
|
|
3
|
+
# as 0. The whole `module ... class << self; ... end ... end`
|
|
4
|
+
# block was silently dropped (no `PM_SINGLETON_CLASS_NODE` parser
|
|
5
|
+
# support), and the entire bare identifier path for module names as
|
|
6
|
+
# rvalues didn't exist.
|
|
7
|
+
#
|
|
8
|
+
# Stage 1 handles the static-fold case: a single assignment of a
|
|
9
|
+
# constant-resolvable RHS (typically a module/class name) is folded
|
|
10
|
+
# at codegen, and read sites substitute the resolved constant in a
|
|
11
|
+
# `<recv>.<method>` chain. Polymorphic / multi-write slots fall
|
|
12
|
+
# through to the un-folded path (Stage 2).
|
|
13
|
+
|
|
14
|
+
# 1. Module assigned to a module-level singleton accessor — the
|
|
15
|
+
# issue's exact reproducer.
|
|
16
|
+
module SqliteAdapter
|
|
17
|
+
def self.answer
|
|
18
|
+
42
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module ActiveRecord
|
|
23
|
+
class << self
|
|
24
|
+
attr_accessor :adapter
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
ActiveRecord.adapter = SqliteAdapter
|
|
29
|
+
puts ActiveRecord.adapter.answer # 42
|
|
30
|
+
|
|
31
|
+
# 2. The string-returning downstream method that surfaced the type
|
|
32
|
+
# mismatch in the issue. Verifies the chain return type
|
|
33
|
+
# threads through correctly (string, not int).
|
|
34
|
+
module Greeter
|
|
35
|
+
def self.greet
|
|
36
|
+
"hello"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module Service
|
|
41
|
+
class << self
|
|
42
|
+
attr_accessor :greeter
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
Service.greeter = Greeter
|
|
47
|
+
puts Service.greeter.greet # hello
|
|
48
|
+
|
|
49
|
+
# 3. Class assigned to a module-level singleton accessor — same
|
|
50
|
+
# constant-fold path applies to user-defined classes as long as
|
|
51
|
+
# the reachable methods on the resolved name are class methods.
|
|
52
|
+
class CounterClass
|
|
53
|
+
def self.count
|
|
54
|
+
7
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
module Holder
|
|
59
|
+
class << self
|
|
60
|
+
attr_accessor :counter
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
Holder.counter = CounterClass
|
|
65
|
+
puts Holder.counter.count # 7
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Issue #126 Stage 2: a module-level singleton accessor that's
|
|
2
|
+
# written with two or more distinct module/class names goes through
|
|
3
|
+
# a runtime sentinel switch instead of being constant-folded.
|
|
4
|
+
# `resolve_module_singleton_accessors` records the union of all
|
|
5
|
+
# constant RHSes; the write site emits `slot = SP_MOD_<X>;` (using
|
|
6
|
+
# the module's `module_sentinel` integer); the chain dispatch
|
|
7
|
+
# emits an if-cascade over the slot.
|
|
8
|
+
|
|
9
|
+
# 1. Two adapters reassigned — same shape as a Rails-style
|
|
10
|
+
# runtime adapter swap.
|
|
11
|
+
module SqliteAdapter
|
|
12
|
+
def self.name; "sqlite"; end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module PgAdapter
|
|
16
|
+
def self.name; "postgres"; end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module ActiveRecord
|
|
20
|
+
class << self
|
|
21
|
+
attr_accessor :adapter
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
ActiveRecord.adapter = SqliteAdapter
|
|
26
|
+
puts ActiveRecord.adapter.name # sqlite
|
|
27
|
+
|
|
28
|
+
ActiveRecord.adapter = PgAdapter
|
|
29
|
+
puts ActiveRecord.adapter.name # postgres
|
|
30
|
+
|
|
31
|
+
ActiveRecord.adapter = SqliteAdapter
|
|
32
|
+
puts ActiveRecord.adapter.name # sqlite
|
|
33
|
+
|
|
34
|
+
# 2. Three candidates with conditional assignment driving which
|
|
35
|
+
# sentinel ends up in the slot.
|
|
36
|
+
module A
|
|
37
|
+
def self.tag; "A"; end
|
|
38
|
+
end
|
|
39
|
+
module B
|
|
40
|
+
def self.tag; "B"; end
|
|
41
|
+
end
|
|
42
|
+
module C
|
|
43
|
+
def self.tag; "C"; end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
module Pick
|
|
47
|
+
class << self
|
|
48
|
+
attr_accessor :slot
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
[1, 2, 3, 1].each do |n|
|
|
53
|
+
if n == 1
|
|
54
|
+
Pick.slot = A
|
|
55
|
+
elsif n == 2
|
|
56
|
+
Pick.slot = B
|
|
57
|
+
else
|
|
58
|
+
Pick.slot = C
|
|
59
|
+
end
|
|
60
|
+
puts Pick.slot.tag
|
|
61
|
+
end
|
|
62
|
+
# A B C A
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Multi-argument `block.call(a, b, ...)` on the proc-object path.
|
|
2
|
+
#
|
|
3
|
+
# Pre-fix, `compile_proc_literal` hardcoded the lambda's signature
|
|
4
|
+
# as `static mrb_int <fn>(void *_cap, mrb_int lv_<bp>)` — a single
|
|
5
|
+
# `mrb_int` slot — and the call site always lowered to
|
|
6
|
+
# `sp_proc_call(lv_<rname>, <arg0>)`, so any second/third positional
|
|
7
|
+
# arg was silently dropped.
|
|
8
|
+
#
|
|
9
|
+
# Fix collects every block param at proc-literal time and emits
|
|
10
|
+
# `(void *_cap, mrb_int lv_<bp1>, mrb_int lv_<bp2>, ...)`, then
|
|
11
|
+
# dispatches the call site to `sp_proc_call_N` (added to the
|
|
12
|
+
# runtime: cast the stored function pointer to the matching N-arg
|
|
13
|
+
# signature and invoke).
|
|
14
|
+
#
|
|
15
|
+
# Out of scope: arity-mismatched calls (`proc { |a| } .call(1, 2)`)
|
|
16
|
+
# stay UB on the C side. Spinel's static dispatch enforces match in
|
|
17
|
+
# the test cases below.
|
|
18
|
+
|
|
19
|
+
# 1. Basic: forwarded `&block` invoked with 2 args.
|
|
20
|
+
class App
|
|
21
|
+
def run(&block)
|
|
22
|
+
block.call(10, 20)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
App.new.run { |a, b| puts a + b }
|
|
27
|
+
|
|
28
|
+
# 2. 3-arg block.call.
|
|
29
|
+
class Wider
|
|
30
|
+
def go(&block)
|
|
31
|
+
block.call(1, 2, 3)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Wider.new.go { |x, y, z| puts x + y + z }
|
|
36
|
+
|
|
37
|
+
# 3. Same proc invoked twice with different concrete args.
|
|
38
|
+
class Twice
|
|
39
|
+
def both(&block)
|
|
40
|
+
block.call(100, 1)
|
|
41
|
+
block.call(200, 2)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Twice.new.both { |a, b| puts a * b }
|
|
46
|
+
|
|
47
|
+
# 4. 0-param block called with one arg. Extra arg is silently dropped
|
|
48
|
+
# (matches CRuby semantics). Exercises the `_unused` fallback path
|
|
49
|
+
# that the multi-param refactor must leave intact.
|
|
50
|
+
class Drop
|
|
51
|
+
def go(&block)
|
|
52
|
+
block.call(99)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
Drop.new.go { puts "called" }
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Multi-argument `yield` in a method body (issue #98).
|
|
2
|
+
#
|
|
3
|
+
# Pre-fix, every `yield` lowered against a single-arg `_block`
|
|
4
|
+
# function pointer (`void (*_block)(mrb_int, void*)`), so any
|
|
5
|
+
# `yield x, y[, ...]` emitted `_block(x, y, _benv)` against the
|
|
6
|
+
# wrong signature and `cc` rejected it. The yield-inlined path
|
|
7
|
+
# (`compile_stmt_with_block`'s YieldNode branch) had a parallel
|
|
8
|
+
# bug: smaller-arity yields in a multi-arity method only assigned
|
|
9
|
+
# the args that were passed, so unset block-local C vars leaked
|
|
10
|
+
# whatever value the previous yield had set.
|
|
11
|
+
#
|
|
12
|
+
# Fix scans each yield-using method's body for the max yield arity
|
|
13
|
+
# and threads that count through `yield_params_suffix*` (so the
|
|
14
|
+
# function-pointer signature gets N `mrb_int` slots) and through
|
|
15
|
+
# `compile_yield_stmt` (function-pointer-path emit). The inlined
|
|
16
|
+
# path is fixed by zeroing remaining `lv_<bp>` slots after each
|
|
17
|
+
# yield's args are assigned.
|
|
18
|
+
|
|
19
|
+
# 1. Basic 2-arg yield.
|
|
20
|
+
def add_pair
|
|
21
|
+
yield 1, 2
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
add_pair { |a, b| puts a + b }
|
|
25
|
+
|
|
26
|
+
# 2. 3-arg yield with block returning to a local.
|
|
27
|
+
def sum_triple
|
|
28
|
+
yield 10, 20, 30
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
sum_triple { |a, b, c| puts a + b + c }
|
|
32
|
+
|
|
33
|
+
# 3. Mixed-arity yields in the same method. The smaller yields
|
|
34
|
+
# must not leak values from the larger ones. Pre-fix, the second
|
|
35
|
+
# yield's `b` would carry 999 from the first yield; post-fix it's
|
|
36
|
+
# 0. Test uses `b.to_i` so the CRuby-side `nil` and Spinel-side
|
|
37
|
+
# mrb_int 0 both produce the same numeric value.
|
|
38
|
+
def mixed_yield
|
|
39
|
+
yield 100, 999
|
|
40
|
+
yield 200
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
total = 0
|
|
44
|
+
mixed_yield { |a, b| total = total + a + b.to_i }
|
|
45
|
+
puts total
|
|
46
|
+
|
|
47
|
+
# 4. Multi-arg yield from a class instance method.
|
|
48
|
+
class Dispatcher
|
|
49
|
+
def emit
|
|
50
|
+
yield 100, 200
|
|
51
|
+
yield 300, 400
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Dispatcher.new.emit { |x, y| puts x + y }
|
|
56
|
+
|
|
57
|
+
# 5. Three different yield arities in one method. Max-arity detection
|
|
58
|
+
# must find 3 so the function-pointer signature has 3 slots; the
|
|
59
|
+
# smaller yields must zero-pad their unused slots. Test uses
|
|
60
|
+
# `b.to_i` / `c.to_i` so CRuby's `nil` for missing block params
|
|
61
|
+
# and Spinel's `mrb_int 0` produce the same numeric sum.
|
|
62
|
+
def varied
|
|
63
|
+
yield 1, 2, 3
|
|
64
|
+
yield 10, 20
|
|
65
|
+
yield 100
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
acc = 0
|
|
69
|
+
varied { |a, b, c| acc = acc + a + b.to_i + c.to_i }
|
|
70
|
+
puts acc
|