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,59 @@
|
|
|
1
|
+
# Regression: instance variables initialized via Array.new(n, FILL) must be
|
|
2
|
+
# typed by inspecting the fill argument, not always returned as "int_array".
|
|
3
|
+
#
|
|
4
|
+
# infer_ivar_init_type's CallNode/"new" branch used to unconditionally return
|
|
5
|
+
# "int_array" for Array.new(...). That mistyped class fields as the
|
|
6
|
+
# containing class's pointer; pointer-type fills additionally lost their GC
|
|
7
|
+
# scan function, which would let live elements be swept.
|
|
8
|
+
#
|
|
9
|
+
# We now check the fill type and use the appropriate typed array container
|
|
10
|
+
# (FloatArray for float fills, StrArray for string, sym_array (IntArray
|
|
11
|
+
# internally) for symbol, PtrArray for object/pointer fills).
|
|
12
|
+
#
|
|
13
|
+
# Use float values whose fractional part is non-zero so Spinel's float-puts
|
|
14
|
+
# matches CRuby's.
|
|
15
|
+
|
|
16
|
+
class Box
|
|
17
|
+
attr_accessor :nums
|
|
18
|
+
def initialize
|
|
19
|
+
@nums = Array.new(3, 0.5)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class SymHolder
|
|
24
|
+
attr_accessor :tags
|
|
25
|
+
def initialize
|
|
26
|
+
@tags = Array.new(2, :alpha)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class Marker
|
|
31
|
+
attr_accessor :id
|
|
32
|
+
def initialize(id)
|
|
33
|
+
@id = id
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class ObjHolder
|
|
38
|
+
attr_accessor :marks
|
|
39
|
+
def initialize
|
|
40
|
+
@marks = Array.new(3, Marker.new(42))
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
b = Box.new
|
|
45
|
+
puts b.nums[0] # 0.5
|
|
46
|
+
puts b.nums[1] # 0.5
|
|
47
|
+
puts b.nums[2] # 0.5
|
|
48
|
+
puts b.nums.length # 3
|
|
49
|
+
|
|
50
|
+
s = SymHolder.new
|
|
51
|
+
puts s.tags[0] # alpha
|
|
52
|
+
puts s.tags[1] # alpha
|
|
53
|
+
puts s.tags.length # 2
|
|
54
|
+
|
|
55
|
+
m = ObjHolder.new
|
|
56
|
+
puts m.marks[0].id # 42
|
|
57
|
+
puts m.marks[1].id # 42 (Array.new(n, obj) shares the same obj)
|
|
58
|
+
puts m.marks[2].id # 42
|
|
59
|
+
puts m.marks.length # 3
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Statement-form `@x OP= v` for the bitwise / shift / multiplicative
|
|
2
|
+
# operators. The pre-fix codegen only handled `+=` and `-=`; every
|
|
3
|
+
# other op-assign was silently dropped, so `@a &= 0x80` left @a
|
|
4
|
+
# untouched. Walks all the operators that map onto C `OP=` directly.
|
|
5
|
+
|
|
6
|
+
class C
|
|
7
|
+
attr_reader :a
|
|
8
|
+
def initialize; @a = 0xff; end
|
|
9
|
+
def m_amp; @a &= 0x80; end
|
|
10
|
+
def m_or; @a |= 0x01; end
|
|
11
|
+
def m_xor; @a ^= 0xff; end
|
|
12
|
+
def m_lsh; @a <<= 1; end
|
|
13
|
+
def m_rsh; @a >>= 1; end
|
|
14
|
+
def m_mul; @a *= 2; end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
c = C.new; c.m_amp; puts "amp: #{c.a}"
|
|
18
|
+
c = C.new; c.m_or; puts "or: #{c.a}"
|
|
19
|
+
c = C.new; c.m_xor; puts "xor: #{c.a}"
|
|
20
|
+
c = C.new; c.m_lsh; puts "lsh: #{c.a}"
|
|
21
|
+
c = C.new; c.m_rsh; puts "rsh: #{c.a}"
|
|
22
|
+
c = C.new; c.m_mul; puts "mul: #{c.a}"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
class T
|
|
2
|
+
def initialize
|
|
3
|
+
@str = nil
|
|
4
|
+
@hits = 0
|
|
5
|
+
@marker = "init"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def cache
|
|
9
|
+
@str ||= compute
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def compute
|
|
13
|
+
@hits += 1
|
|
14
|
+
"hello"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get
|
|
18
|
+
@str
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def hits
|
|
22
|
+
@hits
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
t = T.new
|
|
27
|
+
puts t.get.nil? ? "nil-before" : "not-nil-before"
|
|
28
|
+
puts t.cache
|
|
29
|
+
puts t.get
|
|
30
|
+
puts t.cache
|
|
31
|
+
puts t.get
|
|
32
|
+
puts "hits=#{t.hits}"
|
|
33
|
+
|
|
34
|
+
class U
|
|
35
|
+
def initialize
|
|
36
|
+
@v = nil
|
|
37
|
+
@hits = 0
|
|
38
|
+
@log = []
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def value
|
|
42
|
+
@v ||= 42
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def hits
|
|
46
|
+
@hits
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def log_size
|
|
50
|
+
@log.size
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
u = U.new
|
|
55
|
+
puts u.value
|
|
56
|
+
puts u.value
|
|
57
|
+
puts u.value
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Issue #130: instance variable assigned different definite-typed values
|
|
2
|
+
# across methods used to either fail to compile (-Wint-conversion under
|
|
3
|
+
# -Werror), silently coerce (Integer→Float when slot won inference as Float),
|
|
4
|
+
# or segfault. Fix is in scan_ivars: when both writes are definite-literal
|
|
5
|
+
# and types disagree, widen the slot to poly. Write sites then box every
|
|
6
|
+
# concrete-typed RHS to sp_RbVal; read sites already use sp_poly_puts and
|
|
7
|
+
# friends.
|
|
8
|
+
#
|
|
9
|
+
# Variant 3 of the issue (ternary RHS with mixed types in a single-write
|
|
10
|
+
# slot) is a different root — the slot widens to "int" because IfNode
|
|
11
|
+
# isn't a definite-literal — and is filed separately.
|
|
12
|
+
|
|
13
|
+
# 1. String + Integer — variant 1 from the issue. Original symptom:
|
|
14
|
+
# -Wint-conversion warning, indeterminate runtime output.
|
|
15
|
+
class C1
|
|
16
|
+
def set_int; @x = 42; end
|
|
17
|
+
def set_str; @x = "hello"; end
|
|
18
|
+
def show; puts @x; end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
c1 = C1.new
|
|
22
|
+
c1.set_int; c1.show # 42
|
|
23
|
+
c1.set_str; c1.show # hello
|
|
24
|
+
|
|
25
|
+
# 2. Integer + Float — variant 2. Original symptom: silent coercion;
|
|
26
|
+
# `42` printed as `42.0` because the slot won inference as Float.
|
|
27
|
+
class C2
|
|
28
|
+
def set_int; @x = 42; end
|
|
29
|
+
def set_float; @x = 3.14; end
|
|
30
|
+
def show; puts @x; end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
c2 = C2.new
|
|
34
|
+
c2.set_int; c2.show # 42
|
|
35
|
+
c2.set_float; c2.show # 3.14
|
|
36
|
+
|
|
37
|
+
# 3. String + Symbol — already widened to poly in pre-#130 inference but
|
|
38
|
+
# didn't compile because write sites weren't boxed. Pins the boxing fix.
|
|
39
|
+
class C3
|
|
40
|
+
def set_str; @x = "hello"; end
|
|
41
|
+
def set_sym; @x = :world; end
|
|
42
|
+
def show; puts @x; end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
c3 = C3.new
|
|
46
|
+
c3.set_str; c3.show # hello
|
|
47
|
+
c3.set_sym; c3.show # world
|
|
48
|
+
|
|
49
|
+
# 4. Three concrete types in different methods — slot stays poly across
|
|
50
|
+
# each disagreement.
|
|
51
|
+
class C4
|
|
52
|
+
def set_int; @x = 100; end
|
|
53
|
+
def set_str; @x = "txt"; end
|
|
54
|
+
def set_float; @x = 2.5; end
|
|
55
|
+
def show; puts @x; end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
c4 = C4.new
|
|
59
|
+
c4.set_int; c4.show # 100
|
|
60
|
+
c4.set_str; c4.show # txt
|
|
61
|
+
c4.set_float; c4.show # 2.5
|
|
62
|
+
|
|
63
|
+
# 5. Single-type ivar — regression guard. The pre-#130 happy path stays
|
|
64
|
+
# happy. No widening, slot stays mrb_int.
|
|
65
|
+
class C5
|
|
66
|
+
def set; @x = 42; end
|
|
67
|
+
def show; puts @x; end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
c5 = C5.new
|
|
71
|
+
c5.set; c5.show # 42
|
|
72
|
+
|
|
73
|
+
# 6. Initialize sets one type, another method sets another. Constructor
|
|
74
|
+
# body has its own ivar-write emit path (separate from the general
|
|
75
|
+
# InstanceVariableWriteNode case); this pins both paths box correctly.
|
|
76
|
+
class C6
|
|
77
|
+
def initialize
|
|
78
|
+
@x = 42
|
|
79
|
+
end
|
|
80
|
+
def set_str; @x = "hello"; end
|
|
81
|
+
def show; puts @x; end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
c6 = C6.new
|
|
85
|
+
c6.show # 42
|
|
86
|
+
c6.set_str
|
|
87
|
+
c6.show # hello
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Issue #131: a single-write ivar whose RHS is a ternary (or if-as-
|
|
2
|
+
# expression) with branches of different concrete types used to type
|
|
3
|
+
# the slot from `infer_ivar_init_type`'s default fallback ("int") and
|
|
4
|
+
# emit a raw `(cond ? then : else)` C ternary into a typed slot —
|
|
5
|
+
# pointer/integer mismatch warning, segfault at runtime.
|
|
6
|
+
#
|
|
7
|
+
# Fix: `infer_ivar_init_type` recurses into IfNode branches with strict
|
|
8
|
+
# unification (no "int is default" escape hatch); `box_expr_to_poly`
|
|
9
|
+
# always per-branch boxes IfNode in poly contexts. Slot widens to poly
|
|
10
|
+
# for mixed-type branches; same-type branches infer as that type and
|
|
11
|
+
# the existing path applies.
|
|
12
|
+
|
|
13
|
+
# 1. Ternary mixing String and Integer — variant 3 from #130.
|
|
14
|
+
# Was: -Wconditional-type-mismatch and segfault.
|
|
15
|
+
class C1
|
|
16
|
+
def init(use_str)
|
|
17
|
+
@x = use_str ? "hello" : 42
|
|
18
|
+
end
|
|
19
|
+
def show; puts @x; end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
c1 = C1.new
|
|
23
|
+
c1.init(false); c1.show # 42
|
|
24
|
+
c1.init(true); c1.show # hello
|
|
25
|
+
|
|
26
|
+
# 2. Same shape with Integer/Float — silent-coerce in pre-fix codegen.
|
|
27
|
+
class C2
|
|
28
|
+
def init(use_int)
|
|
29
|
+
@x = use_int ? 100 : 1.5
|
|
30
|
+
end
|
|
31
|
+
def show; puts @x; end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
c2 = C2.new
|
|
35
|
+
c2.init(true); c2.show # 100
|
|
36
|
+
c2.init(false); c2.show # 1.5
|
|
37
|
+
|
|
38
|
+
# 3. Mixed-type ternary combined with later concrete write — must
|
|
39
|
+
# interact with #130's multi-write widening: poly + concrete = stay poly.
|
|
40
|
+
class C3
|
|
41
|
+
def init(use_str)
|
|
42
|
+
@x = use_str ? "hello" : 42
|
|
43
|
+
end
|
|
44
|
+
def overwrite_sym
|
|
45
|
+
@x = :sym
|
|
46
|
+
end
|
|
47
|
+
def show; puts @x; end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
c3 = C3.new
|
|
51
|
+
c3.init(true); c3.show # hello
|
|
52
|
+
c3.overwrite_sym; c3.show # sym
|
|
53
|
+
c3.init(false); c3.show # 42
|
|
54
|
+
|
|
55
|
+
# 4. Same-type ternary — regression guard. Both branches int, slot
|
|
56
|
+
# stays mrb_int, no boxing overhead.
|
|
57
|
+
class C4
|
|
58
|
+
def init(big)
|
|
59
|
+
@x = big ? 1000 : 1
|
|
60
|
+
end
|
|
61
|
+
def show; puts @x; end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
c4 = C4.new
|
|
65
|
+
c4.init(true); c4.show # 1000
|
|
66
|
+
c4.init(false); c4.show # 1
|
|
67
|
+
|
|
68
|
+
# 5. Same-type-string ternary — regression guard. Slot stays string.
|
|
69
|
+
class C5
|
|
70
|
+
def init(loud)
|
|
71
|
+
@x = loud ? "HEY" : "hi"
|
|
72
|
+
end
|
|
73
|
+
def show; puts @x; end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
c5 = C5.new
|
|
77
|
+
c5.init(true); c5.show # HEY
|
|
78
|
+
c5.init(false); c5.show # hi
|
|
79
|
+
|
|
80
|
+
# 6. if-as-expression form (statement-style) with mixed types.
|
|
81
|
+
# Same AST shape (IfNode) as ternary, just multi-line surface syntax.
|
|
82
|
+
class C6
|
|
83
|
+
def init(use_str)
|
|
84
|
+
@x = if use_str
|
|
85
|
+
"world"
|
|
86
|
+
else
|
|
87
|
+
99
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
def show; puts @x; end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
c6 = C6.new
|
|
94
|
+
c6.init(true); c6.show # world
|
|
95
|
+
c6.init(false); c6.show # 99
|
|
96
|
+
|
|
97
|
+
# 7. Ternary with nil branch — should widen to nullable string,
|
|
98
|
+
# not poly. Let the existing nullable widening flow through.
|
|
99
|
+
class C7
|
|
100
|
+
def init(have)
|
|
101
|
+
@x = have ? "yes" : nil
|
|
102
|
+
end
|
|
103
|
+
def show; puts @x.nil? ? "nope" : @x; end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
c7 = C7.new
|
|
107
|
+
c7.init(true); c7.show # yes
|
|
108
|
+
c7.init(false); c7.show # nope
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Issue #247: when two writers in different methods of the same class
|
|
2
|
+
# disagree on the value type, spinel used to narrow the slot to
|
|
3
|
+
# whichever writer's update_ivar_type call ran last — and the loser's
|
|
4
|
+
# emit site silently miscompiled. Here writer 1 in initialize assigns
|
|
5
|
+
# an int (via SymIntHash#[]) and writer 2 in write_any assigns a
|
|
6
|
+
# string param; the slot must widen to poly so both store cleanly.
|
|
7
|
+
|
|
8
|
+
class C
|
|
9
|
+
def initialize(h)
|
|
10
|
+
@id = h[:id]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def id; @id; end
|
|
14
|
+
|
|
15
|
+
def write_any(value)
|
|
16
|
+
@id = value
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
c = C.new({id: 42})
|
|
21
|
+
c.write_any("string")
|
|
22
|
+
puts c.id
|
|
23
|
+
|
|
24
|
+
# Ensure the int-writer side still works when we don't re-write to a
|
|
25
|
+
# different type — the slot stays as observed.
|
|
26
|
+
class D
|
|
27
|
+
def initialize(h)
|
|
28
|
+
@v = h[:v]
|
|
29
|
+
end
|
|
30
|
+
def v; @v; end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
d = D.new({v: 7})
|
|
34
|
+
puts d.v
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Issue #75: the codegen now rejects an unknown constant reference
|
|
2
|
+
# with a "uninitialized constant <Name>" error instead of either
|
|
3
|
+
# leaking the bare identifier into the C output (`p Foo`) or
|
|
4
|
+
# silently lowering to `0` (`p Foo.bar`). This regression test pins
|
|
5
|
+
# the legitimate constant references that look superficially like
|
|
6
|
+
# the failing cases but resolve to known names — the fix shouldn't
|
|
7
|
+
# reject any of them.
|
|
8
|
+
|
|
9
|
+
# User-defined class — `find_class_idx` resolves it.
|
|
10
|
+
class Box
|
|
11
|
+
def initialize(v); @v = v; end
|
|
12
|
+
attr_reader :v
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
puts Box.new(7).v # 7
|
|
16
|
+
|
|
17
|
+
# User-defined constant.
|
|
18
|
+
N = 42
|
|
19
|
+
puts N # 42
|
|
20
|
+
|
|
21
|
+
# Built-in module-like receiver (Math).
|
|
22
|
+
puts Math.sqrt(16).to_i # 4
|
|
23
|
+
|
|
24
|
+
# ARGV / STDOUT pass through.
|
|
25
|
+
puts ARGV.length # 0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Test keyword arguments and splat
|
|
2
|
+
|
|
3
|
+
def greet(name:, greeting: "Hello")
|
|
4
|
+
puts greeting
|
|
5
|
+
puts name
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
greet(name: "world")
|
|
9
|
+
greet(name: "Ruby", greeting: "Hi")
|
|
10
|
+
|
|
11
|
+
# Rest args (splat)
|
|
12
|
+
def sum(*nums)
|
|
13
|
+
total = 0
|
|
14
|
+
nums.each do |n|
|
|
15
|
+
total += n
|
|
16
|
+
end
|
|
17
|
+
total
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
puts sum(1, 2, 3) # 6
|
|
21
|
+
puts sum(10, 20) # 30
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# KeywordRestParameterNode -- def f(**kw)
|
|
2
|
+
#
|
|
3
|
+
# Declares a method that captures all keyword arguments into a single
|
|
4
|
+
# sym_poly_hash slot. The full body-access path (kw[:key], kw.length)
|
|
5
|
+
# is deferred until a real program needs it; this test verifies the declaration
|
|
6
|
+
# alone compiles and the existing **nil form still works.
|
|
7
|
+
#
|
|
8
|
+
# Forwarding usage (**kw → another method's **kw slot) is exercised by
|
|
9
|
+
# test/forwarding_args.rb, which routes through cluster A3 + B1.
|
|
10
|
+
|
|
11
|
+
# Declaration compiles; body never reads kw, so no kwargs runtime path
|
|
12
|
+
# is needed. Validates that adding the param slot doesn't break
|
|
13
|
+
# bootstrap or alter the C signature for callers that don't pass kwargs.
|
|
14
|
+
def silent(a, **kw)
|
|
15
|
+
a + 1
|
|
16
|
+
end
|
|
17
|
+
puts silent(2).to_s #=> 3
|
|
18
|
+
|
|
19
|
+
# `def f(**nil)` is the explicit "rejects keyword args" form.
|
|
20
|
+
# Verifies the existing NoKeywordsParameterNode handling still works
|
|
21
|
+
# after the parser's PARAMETERS_NODE flattener gained the keyword_rest
|
|
22
|
+
# emission (cluster A1).
|
|
23
|
+
def strict(a, b, **nil)
|
|
24
|
+
a + b
|
|
25
|
+
end
|
|
26
|
+
puts strict(2, 3).to_s #=> 5
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Issue #314 (B): a module class method's required keyword params
|
|
2
|
+
# never widened from the "int" default at scan_new_calls time. The
|
|
3
|
+
# AST presents kwargs as a single trailing KeywordHashNode, and the
|
|
4
|
+
# existing positional-only widening loop unified the hash type into
|
|
5
|
+
# `ptypes[0]` and never touched the per-kwarg slots.
|
|
6
|
+
#
|
|
7
|
+
# Two complementary fixes:
|
|
8
|
+
# 1. widen_ptypes_from_args helper that walks KeywordHashNode
|
|
9
|
+
# children, mapping each `key: value` pair to the matching
|
|
10
|
+
# keyword param's slot in the callee's ptypes array.
|
|
11
|
+
# 2. compile_call_args_with_defaults / compile_call_args_splat
|
|
12
|
+
# emit-side: replace the hardcoded `sp_box_str(...)` for poly
|
|
13
|
+
# kwargs with `box_expr_to_poly(...)` so the box helper is
|
|
14
|
+
# picked from the arg's actual source type.
|
|
15
|
+
#
|
|
16
|
+
# Surfaced via Roundhouse's emitted real-blog `form_with(model:,
|
|
17
|
+
# model_name:, action:, method:, opts:)` shape — minimal repro
|
|
18
|
+
# extracted with two distinct obj types passed to the same kwarg.
|
|
19
|
+
|
|
20
|
+
# Article/Comment have an array ivar so neither qualifies for the
|
|
21
|
+
# value-type optimization — instances stay heap-allocated and the
|
|
22
|
+
# captured-by-poly boxing site (`sp_box_obj`) sees a real pointer.
|
|
23
|
+
# (Pure-int/string-ivar classes flowing into a poly param at a call
|
|
24
|
+
# site is a separate, orthogonal value-type-exclusion concern that
|
|
25
|
+
# surfaces only with inline `X.new(...)` directly inside a poly-
|
|
26
|
+
# typed call slot — not exercised by this issue's Roundhouse trigger,
|
|
27
|
+
# where the receiver is always a previously-allocated local.)
|
|
28
|
+
|
|
29
|
+
class Article
|
|
30
|
+
def initialize(id, name); @id = id; @name = name; @tags = []; end
|
|
31
|
+
def kind; "article-" + @name; end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class Comment
|
|
35
|
+
def initialize(body); @body = body; @replies = []; end
|
|
36
|
+
def kind; "comment-" + @body; end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
module M
|
|
40
|
+
def self.render(model:, label:)
|
|
41
|
+
"[#{label}] #{model.kind}"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Pre-allocate (matches the Roundhouse `lv_article` shape — locals
|
|
46
|
+
# carry `sp_<C> *`, not struct-by-value).
|
|
47
|
+
a = Article.new(7, "alpha")
|
|
48
|
+
c = Comment.new("hello")
|
|
49
|
+
|
|
50
|
+
# Two call sites with different obj types for `model:`. The widening
|
|
51
|
+
# pass must collapse them to poly so the call-site box helper picks
|
|
52
|
+
# sp_box_obj (not the pre-fix sp_box_str).
|
|
53
|
+
puts M.render(model: a, label: "art") # [art] article-alpha
|
|
54
|
+
puts M.render(model: c, label: "com") # [com] comment-hello
|
|
55
|
+
|
|
56
|
+
# Module-inner class constructor inside a module class method
|
|
57
|
+
# body. infer_function_body_call_types now pins
|
|
58
|
+
# @current_method_name so resolve_const_read_name's
|
|
59
|
+
# `<Mod>_cls_<m>` peel resolves `Inner` to `M_Inner` — pre-fix
|
|
60
|
+
# the find_class_idx lookup returned -1 and skipped the
|
|
61
|
+
# constructor-arg widening of N::Inner.@x.
|
|
62
|
+
module N
|
|
63
|
+
class Inner
|
|
64
|
+
def initialize(x); @x = x; end
|
|
65
|
+
def show; "inner=#{@x.kind}"; end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.make(model:)
|
|
69
|
+
Inner.new(model).show
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
puts N.make(model: a) # inner=article-alpha
|