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,81 @@
|
|
|
1
|
+
# Array#slice!(from, n) on every typed array. Returns a fresh
|
|
2
|
+
# array of n elements starting at `from`, and mutates the receiver
|
|
3
|
+
# to remove them. IntArray uses its `start` field for an O(1) head
|
|
4
|
+
# peel; the others shift the tail down to fill the hole.
|
|
5
|
+
|
|
6
|
+
# --- IntArray: head peel (from == 0) ---
|
|
7
|
+
arr = [10, 20, 30, 40, 50]
|
|
8
|
+
head = arr.slice!(0, 2)
|
|
9
|
+
puts head.length # 2
|
|
10
|
+
puts head[0] # 10
|
|
11
|
+
puts head[1] # 20
|
|
12
|
+
puts arr.length # 3
|
|
13
|
+
puts arr[0] # 30
|
|
14
|
+
|
|
15
|
+
# --- IntArray: middle slice (from > 0, tail shift) ---
|
|
16
|
+
arr2 = [1, 2, 3, 4, 5, 6, 7]
|
|
17
|
+
mid = arr2.slice!(2, 3)
|
|
18
|
+
puts mid[0] # 3
|
|
19
|
+
puts mid[2] # 5
|
|
20
|
+
puts arr2.length # 4
|
|
21
|
+
puts arr2[2] # 6 (tail shifted down)
|
|
22
|
+
puts arr2[3] # 7
|
|
23
|
+
|
|
24
|
+
# --- IntArray: n > available, clamped ---
|
|
25
|
+
arr3 = [100, 200, 300]
|
|
26
|
+
big = arr3.slice!(1, 999)
|
|
27
|
+
puts big.length # 2
|
|
28
|
+
puts arr3.length # 1
|
|
29
|
+
|
|
30
|
+
# --- FloatArray ---
|
|
31
|
+
fa = [1.5, 2.5, 3.5, 4.5, 5.5]
|
|
32
|
+
fh = fa.slice!(0, 2)
|
|
33
|
+
puts fh.length # 2
|
|
34
|
+
puts fh[0] # 1.5
|
|
35
|
+
puts fa.length # 3
|
|
36
|
+
puts fa[0] # 3.5
|
|
37
|
+
|
|
38
|
+
# --- StrArray ---
|
|
39
|
+
sa = ["a", "b", "c", "d", "e"]
|
|
40
|
+
sh = sa.slice!(1, 2)
|
|
41
|
+
puts sh.length # 2
|
|
42
|
+
puts sh[0] # b
|
|
43
|
+
puts sh[1] # c
|
|
44
|
+
puts sa.length # 3
|
|
45
|
+
puts sa[0] # a
|
|
46
|
+
puts sa[1] # d (tail shifted down)
|
|
47
|
+
puts sa[2] # e
|
|
48
|
+
|
|
49
|
+
# --- SymArray (shares the IntArray helper internally) ---
|
|
50
|
+
syms = [:foo, :bar, :baz, :qux]
|
|
51
|
+
sym_h = syms.slice!(0, 2)
|
|
52
|
+
puts sym_h.length # 2
|
|
53
|
+
puts sym_h[0] # foo
|
|
54
|
+
puts syms.length # 2
|
|
55
|
+
puts syms[0] # baz
|
|
56
|
+
puts syms[1] # qux
|
|
57
|
+
|
|
58
|
+
# --- PtrArray (array of obj_X instances) ---
|
|
59
|
+
class Box
|
|
60
|
+
attr_reader :v
|
|
61
|
+
def initialize(v); @v = v; end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
pa = [Box.new(10), Box.new(20), Box.new(30), Box.new(40)]
|
|
65
|
+
ph = pa.slice!(1, 2)
|
|
66
|
+
puts ph.length # 2
|
|
67
|
+
puts ph[0].v # 20
|
|
68
|
+
puts ph[1].v # 30
|
|
69
|
+
puts pa.length # 2
|
|
70
|
+
puts pa[0].v # 10
|
|
71
|
+
puts pa[1].v # 40 (tail shifted down)
|
|
72
|
+
|
|
73
|
+
# --- PolyArray (heterogeneous literal) ---
|
|
74
|
+
poly = [1, "two", :three, 4.5, "five"]
|
|
75
|
+
poly_h = poly.slice!(1, 3)
|
|
76
|
+
puts poly_h.length # 3
|
|
77
|
+
puts poly_h[0] # two
|
|
78
|
+
puts poly_h[2] # 4.5
|
|
79
|
+
puts poly.length # 2
|
|
80
|
+
puts poly[0] # 1
|
|
81
|
+
puts poly[1] # five
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
2
|
|
2
|
+
10
|
|
3
|
+
20
|
|
4
|
+
3
|
|
5
|
+
30
|
|
6
|
+
3
|
|
7
|
+
5
|
|
8
|
+
4
|
|
9
|
+
6
|
|
10
|
+
7
|
|
11
|
+
2
|
|
12
|
+
1
|
|
13
|
+
2
|
|
14
|
+
1.5
|
|
15
|
+
3
|
|
16
|
+
3.5
|
|
17
|
+
2
|
|
18
|
+
b
|
|
19
|
+
c
|
|
20
|
+
3
|
|
21
|
+
a
|
|
22
|
+
d
|
|
23
|
+
e
|
|
24
|
+
2
|
|
25
|
+
foo
|
|
26
|
+
2
|
|
27
|
+
baz
|
|
28
|
+
qux
|
|
29
|
+
2
|
|
30
|
+
20
|
|
31
|
+
30
|
|
32
|
+
2
|
|
33
|
+
10
|
|
34
|
+
40
|
|
35
|
+
3
|
|
36
|
+
two
|
|
37
|
+
4.5
|
|
38
|
+
2
|
|
39
|
+
1
|
|
40
|
+
five
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Test attr_accessor, attr_reader, attr_writer, class methods, for..in, loop
|
|
2
|
+
|
|
3
|
+
class Point
|
|
4
|
+
attr_accessor :x, :y
|
|
5
|
+
|
|
6
|
+
def initialize(x, y)
|
|
7
|
+
@x = x
|
|
8
|
+
@y = y
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.origin
|
|
12
|
+
Point.new(0, 0)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def distance_to(other)
|
|
16
|
+
dx = @x - other.x
|
|
17
|
+
dy = @y - other.y
|
|
18
|
+
Math.sqrt(dx * dx + dy * dy)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
"(" + @x.to_s + ", " + @y.to_s + ")"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
p1 = Point.new(3, 4)
|
|
27
|
+
puts p1.x # 3
|
|
28
|
+
puts p1.y # 4
|
|
29
|
+
p1.x = 10
|
|
30
|
+
puts p1.x # 10
|
|
31
|
+
|
|
32
|
+
p2 = Point.origin
|
|
33
|
+
puts p2.x # 0
|
|
34
|
+
|
|
35
|
+
# for..in with range
|
|
36
|
+
total = 0
|
|
37
|
+
for i in 1..10
|
|
38
|
+
total += i
|
|
39
|
+
end
|
|
40
|
+
puts total # 55
|
|
41
|
+
|
|
42
|
+
# loop with break
|
|
43
|
+
count = 0
|
|
44
|
+
loop do
|
|
45
|
+
count += 1
|
|
46
|
+
break if count >= 5
|
|
47
|
+
end
|
|
48
|
+
puts count # 5
|
|
49
|
+
|
|
50
|
+
# Array#each with index (using each)
|
|
51
|
+
arr = (1..5).to_a
|
|
52
|
+
sum = 0
|
|
53
|
+
arr.each do |x|
|
|
54
|
+
sum += x
|
|
55
|
+
end
|
|
56
|
+
puts sum # 15
|
|
57
|
+
|
|
58
|
+
# String#to_s on object
|
|
59
|
+
puts p1.to_s # (10, 4)
|
|
60
|
+
|
|
61
|
+
# attr_accessor path should keep ivar/local namespaces distinct.
|
|
62
|
+
class IvarCollision
|
|
63
|
+
attr_accessor :x, :iv_x
|
|
64
|
+
|
|
65
|
+
def initialize
|
|
66
|
+
@x = 1
|
|
67
|
+
@iv_x = 2
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def sum
|
|
71
|
+
x = 10
|
|
72
|
+
iv_x = 20
|
|
73
|
+
@x + @iv_x + self.x + self.iv_x + x + iv_x
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
puts IvarCollision.new.sum # 36
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# `obj.attr = v` codegen emitted `slot = arg0` regardless of slot
|
|
2
|
+
# type. When the slot is poly (sp_RbVal — widened by heterogeneous
|
|
3
|
+
# writes) and the rhs is typed (int / string / obj_X / ...), C
|
|
4
|
+
# rejects the assignment as a struct-from-scalar/pointer mismatch.
|
|
5
|
+
|
|
6
|
+
class Bag
|
|
7
|
+
attr_accessor :item
|
|
8
|
+
def initialize
|
|
9
|
+
@item = "tag" # string first…
|
|
10
|
+
@item = 5 # …then int — slot widens to poly
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Caller
|
|
15
|
+
def stuff(bag)
|
|
16
|
+
bag.item = 99 # statement-form attr-writer on poly slot
|
|
17
|
+
bag.item
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
b = Bag.new
|
|
22
|
+
puts Caller.new.stuff(b) # 99
|
|
23
|
+
puts (b.item = 7) # 7 (expression-form; `=` returns rhs)
|
|
24
|
+
puts b.item # 7
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Expression-form `obj.attr = rhs` on a poly slot used to lower to
|
|
2
|
+
# the comma expression `(slot = box(rhs), rhs)`, which evaluates rhs
|
|
3
|
+
# textually twice in C. If rhs has side effects (a method call, a
|
|
4
|
+
# string allocation, etc.) they run twice. Verify rhs runs exactly
|
|
5
|
+
# once by spilling to a typed temp via statement expression.
|
|
6
|
+
|
|
7
|
+
class Counter
|
|
8
|
+
def initialize
|
|
9
|
+
@n = 0
|
|
10
|
+
end
|
|
11
|
+
def step
|
|
12
|
+
@n = @n + 1
|
|
13
|
+
@n
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Bag
|
|
18
|
+
attr_accessor :item
|
|
19
|
+
def initialize
|
|
20
|
+
@item = "tag" # widen slot to poly via heterogeneous writes
|
|
21
|
+
@item = 5
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
c = Counter.new
|
|
26
|
+
b = Bag.new
|
|
27
|
+
puts (b.item = c.step) # 1 (chain value is rhs; step runs once)
|
|
28
|
+
puts (b.item = c.step) # 2
|
|
29
|
+
puts (b.item = c.step) # 3
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `obj.attr = v` as an expression should evaluate to `v`, the rhs,
|
|
2
|
+
# matching Ruby semantics. Codegen used to emit `(rc->iv = v, 0)` —
|
|
3
|
+
# the trailing `, 0` made the C expression value `0`, so chained
|
|
4
|
+
# writes `local = obj.attr = v` saw 0 instead of v.
|
|
5
|
+
|
|
6
|
+
class Box
|
|
7
|
+
attr_accessor :n
|
|
8
|
+
def initialize
|
|
9
|
+
@n = 0
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
b = Box.new
|
|
14
|
+
local = (b.n = 42)
|
|
15
|
+
puts local # 42
|
|
16
|
+
puts b.n # 42
|
|
17
|
+
|
|
18
|
+
# Chained variant — both lvalues should land on the same rhs value.
|
|
19
|
+
b1 = Box.new
|
|
20
|
+
b2 = Box.new
|
|
21
|
+
b1.n = b2.n = 7
|
|
22
|
+
puts b1.n # 7
|
|
23
|
+
puts b2.n # 7
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Followup to PR #347: when a poly RHS is auto-unboxed into an
|
|
2
|
+
# int local slot, the slot's tracked type must stay int so a
|
|
3
|
+
# *subsequent* poly RHS write also unboxes. Without this, the
|
|
4
|
+
# first auto-unbox-write widened the slot's tracked type to
|
|
5
|
+
# poly; the second poly write then emitted `lv = <sp_RbVal>;`
|
|
6
|
+
# (no unbox) into the still-int C declaration, failing the C
|
|
7
|
+
# compile (`incompatible types when assigning to type 'mrb_int'
|
|
8
|
+
# from type 'sp_RbVal'`).
|
|
9
|
+
#
|
|
10
|
+
# Reproduces optcarrot's chained `pixel0 = sprite[N]` writes:
|
|
11
|
+
# the function-level slot stays mrb_int (set by an earlier
|
|
12
|
+
# int_array read), but later sprite[N] writes are poly.
|
|
13
|
+
|
|
14
|
+
class C
|
|
15
|
+
def make_int_arr; @arr = [10, 20, 30]; end
|
|
16
|
+
def make_poly_arr
|
|
17
|
+
@arr = [nil] * 3
|
|
18
|
+
@arr[0] = 100
|
|
19
|
+
@arr[1] = 200
|
|
20
|
+
@arr[2] = 300
|
|
21
|
+
end
|
|
22
|
+
def at(i); @arr[i]; end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
c = C.new
|
|
26
|
+
|
|
27
|
+
# Two consecutive poly RHS writes into the same int slot. Both
|
|
28
|
+
# must auto-unbox; without the fix, the second one fails C compile.
|
|
29
|
+
c.make_int_arr
|
|
30
|
+
val = c.at(0) # int RHS, val slot established as int
|
|
31
|
+
puts val
|
|
32
|
+
|
|
33
|
+
c.make_poly_arr
|
|
34
|
+
val = c.at(0) # 1st poly RHS — already worked in PR #347
|
|
35
|
+
puts val
|
|
36
|
+
|
|
37
|
+
val = c.at(2) # 2nd poly RHS — must also unbox; failed pre-fix
|
|
38
|
+
puts val
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Auto-unbox poly RHS into a primitive int local slot. Common
|
|
2
|
+
# case: `lv = arr[i]` where arr's element dispatch returns poly
|
|
3
|
+
# (heterogeneous element types) but the local was already inferred
|
|
4
|
+
# as int from a prior write. Spinel previously emitted
|
|
5
|
+
# `lv = <sp_RbVal>;` and the C compile failed (`incompatible
|
|
6
|
+
# types when assigning to type 'mrb_int' from type 'sp_RbVal'`).
|
|
7
|
+
#
|
|
8
|
+
# Repro: an ivar widened to poly via two distinct array shapes
|
|
9
|
+
# (an int_array and a poly_array). The local `pixel` was first
|
|
10
|
+
# set from an int_array (so its declared C type is mrb_int),
|
|
11
|
+
# then a second write reassigns from the poly slot. Without
|
|
12
|
+
# auto-unbox, the second assignment fails.
|
|
13
|
+
|
|
14
|
+
class C
|
|
15
|
+
def make_int_arr
|
|
16
|
+
@arr = [10, 20, 30]
|
|
17
|
+
end
|
|
18
|
+
def make_poly_arr
|
|
19
|
+
@arr = [nil] * 3
|
|
20
|
+
@arr[0] = 99
|
|
21
|
+
@arr[1] = "x"
|
|
22
|
+
@arr[2] = :y
|
|
23
|
+
end
|
|
24
|
+
def first_int
|
|
25
|
+
@arr[0]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
c = C.new
|
|
30
|
+
c.make_int_arr
|
|
31
|
+
pixel = c.first_int # int from int_array
|
|
32
|
+
puts pixel.to_s
|
|
33
|
+
|
|
34
|
+
c.make_poly_arr
|
|
35
|
+
pixel = c.first_int # poly from poly_array, must auto-unbox
|
|
36
|
+
puts pixel.to_s
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# BackReferenceReadNode -- `$&`, `$~`, `$'`, $`.
|
|
2
|
+
#
|
|
3
|
+
# Special globals populated by regex matches. Spinel's regex engine
|
|
4
|
+
# already populates sp_re_match* state for $1..$9 (NumberedReferenceReadNode);
|
|
5
|
+
# this extends to the symbolic back-references.
|
|
6
|
+
#
|
|
7
|
+
# $& -- the entire matched substring
|
|
8
|
+
# $~ -- the MatchData object (aliased to $& in Spinel; no MatchData wrapper)
|
|
9
|
+
# $` -- the substring before the match
|
|
10
|
+
# $' -- the substring after the match
|
|
11
|
+
|
|
12
|
+
"hello world" =~ /lo wo/
|
|
13
|
+
puts $& # lo wo
|
|
14
|
+
puts $` # hel
|
|
15
|
+
puts $' # rld
|
|
16
|
+
|
|
17
|
+
# Re-match updates the state
|
|
18
|
+
"abcdef" =~ /cd/
|
|
19
|
+
puts $& # cd
|
|
20
|
+
puts $` # ab
|
|
21
|
+
puts $' # ef
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Issue #314 follow-up: a class method whose return type was
|
|
2
|
+
# inferred as `obj_<C>` (because every explicit return path
|
|
3
|
+
# produced a value of that class) lowered a bare `return` to
|
|
4
|
+
# `return self;` — but class methods have no `self` C param, so
|
|
5
|
+
# gcc complained `'self' undeclared`.
|
|
6
|
+
#
|
|
7
|
+
# Fix: thread a `@current_method_has_self` flag through the
|
|
8
|
+
# instance-method / class-method / top-level / constructor-
|
|
9
|
+
# synthesis emit paths. compile_return_stmt's bare-return-with-
|
|
10
|
+
# obj_<C>-return path emits `return self;` only when has_self=1,
|
|
11
|
+
# otherwise `return c_return_default(...);` (which knows about
|
|
12
|
+
# value vs pointer object types).
|
|
13
|
+
#
|
|
14
|
+
# Companion to b9d6303 (#337) which added the obj_<C> branch for
|
|
15
|
+
# constructor synthesis.
|
|
16
|
+
#
|
|
17
|
+
# Surfaced via Roundhouse's `InMemoryAdapter.update` — a module
|
|
18
|
+
# class method whose return type was inferred as obj_HWIA via
|
|
19
|
+
# the `attrs.each` last-expression, with an early `return if
|
|
20
|
+
# row.nil?` lowering to broken `return self;`.
|
|
21
|
+
|
|
22
|
+
class Holder
|
|
23
|
+
attr_reader :id
|
|
24
|
+
def initialize(id)
|
|
25
|
+
@id = id
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.maybe(id)
|
|
29
|
+
if id < 0
|
|
30
|
+
return # ← bare return; bug emitted `return self;`
|
|
31
|
+
end
|
|
32
|
+
Holder.new(id)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Pushing into a [Holder] array forces Holder out of the value-type
|
|
37
|
+
# bucket so `Holder.maybe` returns `sp_Holder *` (pointer) and the
|
|
38
|
+
# bare-return shape exercises the pointer fallback.
|
|
39
|
+
holders = [Holder.new(0)]
|
|
40
|
+
|
|
41
|
+
a = Holder.maybe(42)
|
|
42
|
+
holders << a
|
|
43
|
+
puts a.id # 42
|
|
44
|
+
|
|
45
|
+
b = Holder.maybe(-1)
|
|
46
|
+
puts b.nil? # true
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Issue #337: a bare `return` (Ruby's "exit early" form) inside an
|
|
2
|
+
# `initialize` body used to lower to `return 0;` regardless of the
|
|
3
|
+
# wrapping function's C return type. Two emit shapes were affected:
|
|
4
|
+
#
|
|
5
|
+
# - `sp_<C>_new(...)` (sp_<C> *-returning, the heap-allocated
|
|
6
|
+
# constructor synthesis): `return 0;` silently NULLed the
|
|
7
|
+
# instance on the early-return branch — semantically wrong, no C
|
|
8
|
+
# diagnostic.
|
|
9
|
+
#
|
|
10
|
+
# - `sp_<C>_initialize(...)` (void-returning, used for `super`
|
|
11
|
+
# chains): `return 0;` is a `void function should not return a
|
|
12
|
+
# value` error under strict C compile.
|
|
13
|
+
#
|
|
14
|
+
# Fix: pin @current_method_return per emission shape (obj_<C> for
|
|
15
|
+
# the _new synthesis, "void" for the _initialize wrapper) so the
|
|
16
|
+
# bare-return path picks the right C statement — `return self;` for
|
|
17
|
+
# heap constructors (returns the partially-initialized instance,
|
|
18
|
+
# matching the issue's expected-behavior table) and `return;` for
|
|
19
|
+
# the void wrapper.
|
|
20
|
+
|
|
21
|
+
class Box
|
|
22
|
+
attr_reader :data
|
|
23
|
+
def initialize(other = nil)
|
|
24
|
+
@data = "ok"
|
|
25
|
+
return if other.nil?
|
|
26
|
+
@data = other
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Default-construct: the bare `return` inside initialize fires;
|
|
31
|
+
# `@data` stays at "ok".
|
|
32
|
+
b1 = Box.new
|
|
33
|
+
puts b1.data # ok
|
|
34
|
+
|
|
35
|
+
# Pass an explicit value: the early return is skipped; `@data` is
|
|
36
|
+
# overwritten.
|
|
37
|
+
b2 = Box.new("hi")
|
|
38
|
+
puts b2.data # hi
|
|
39
|
+
|
|
40
|
+
# Subclass exercising the void `_initialize` super-call form: the
|
|
41
|
+
# parent's bare return inside the wrapper must lower to `return;`
|
|
42
|
+
# (not `return 0;`, which would be a C error in a void function).
|
|
43
|
+
class TaggedBox < Box
|
|
44
|
+
attr_reader :tag
|
|
45
|
+
def initialize(other = nil, tag:)
|
|
46
|
+
super(other)
|
|
47
|
+
@tag = tag
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
t = TaggedBox.new("payload", tag: "label")
|
|
52
|
+
puts t.tag # label
|
|
53
|
+
|
|
54
|
+
t2 = TaggedBox.new(tag: "empty")
|
|
55
|
+
puts t2.tag # empty
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Issue #383: bare `return` (no value) in a method whose declared
|
|
2
|
+
# return type is `sp_RbVal` (poly) emitted literal `return 0;`
|
|
3
|
+
# instead of `return sp_box_nil();` — gcc errors `incompatible
|
|
4
|
+
# types when returning type 'int' but 'sp_RbVal' was expected`.
|
|
5
|
+
# The implicit end-of-function fallthrough already emitted the
|
|
6
|
+
# correct boxed nil; only bare-return statements were missed.
|
|
7
|
+
#
|
|
8
|
+
# Sister to the void-initialize and obj_<C>-class-method fixes
|
|
9
|
+
# (#337 / #314 follow-up). compile_return_stmt's bare-return
|
|
10
|
+
# path now has a poly arm that emits `sp_box_nil()`.
|
|
11
|
+
|
|
12
|
+
class Adapter
|
|
13
|
+
def self.lookup(key)
|
|
14
|
+
return unless key == "x" # poly-returning fn, bare return
|
|
15
|
+
if key.length > 5
|
|
16
|
+
"long-string"
|
|
17
|
+
else
|
|
18
|
+
[1, 2, 3]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Heterogeneous return types collapse to poly; the bare-return
|
|
24
|
+
# branch needs to box nil into the same slot.
|
|
25
|
+
puts Adapter.lookup("x").to_s
|
|
26
|
+
puts Adapter.lookup("none").to_s
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Bigint division / modulo by zero raises ZeroDivisionError.
|
|
2
|
+
#
|
|
3
|
+
# Bigint detection: `a = a * 2` inside a `while` loop promotes the
|
|
4
|
+
# local to bigint via scan_bigint_in_loop_node. Raising 1 by *2 50
|
|
5
|
+
# times overflows the mrb_int range so `a` is bigint-typed by the
|
|
6
|
+
# time we hit the / 0 expression.
|
|
7
|
+
#
|
|
8
|
+
# Runtime path: sp_bigint_div / sp_bigint_mod call into mini-gmp,
|
|
9
|
+
# which detects the zero divisor at sp_bigint.c:2718 and calls
|
|
10
|
+
# mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0"). The mrb_raise
|
|
11
|
+
# macro now dispatches to sp_bigint_raise_zerodiv (defined non-
|
|
12
|
+
# static in sp_runtime.h, linked from gen.c), which calls
|
|
13
|
+
# sp_raise_cls — same longjmp path as the int-div case.
|
|
14
|
+
|
|
15
|
+
a = 1
|
|
16
|
+
i = 0
|
|
17
|
+
while i < 50
|
|
18
|
+
a = a * 2
|
|
19
|
+
i = i + 1
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# `a` is now 2^50, well above the mrb_int range — bigint-typed.
|
|
23
|
+
|
|
24
|
+
begin
|
|
25
|
+
x = a / 0
|
|
26
|
+
puts "no raise"
|
|
27
|
+
rescue ZeroDivisionError => e
|
|
28
|
+
puts "caught bigint div: #{e}"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
begin
|
|
32
|
+
x = a % 0
|
|
33
|
+
puts "no raise"
|
|
34
|
+
rescue ZeroDivisionError => e
|
|
35
|
+
puts "caught bigint mod: #{e}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Bare rescue also catches.
|
|
39
|
+
begin
|
|
40
|
+
a / 0
|
|
41
|
+
rescue => e
|
|
42
|
+
puts "bare-rescue: #{e}"
|
|
43
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Test block_given? and optional blocks
|
|
2
|
+
|
|
3
|
+
def maybe_yield(x)
|
|
4
|
+
if block_given?
|
|
5
|
+
yield x
|
|
6
|
+
else
|
|
7
|
+
x * 2
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
puts maybe_yield(5) # 10 (no block)
|
|
12
|
+
|
|
13
|
+
result = 0
|
|
14
|
+
maybe_yield(5) do |n|
|
|
15
|
+
result = n * 3
|
|
16
|
+
end
|
|
17
|
+
puts result # 15
|
|
18
|
+
|
|
19
|
+
# Method that always yields
|
|
20
|
+
def each_pair(a, b)
|
|
21
|
+
yield a
|
|
22
|
+
yield b
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
total = 0
|
|
26
|
+
each_pair(10, 20) do |n|
|
|
27
|
+
total += n
|
|
28
|
+
end
|
|
29
|
+
puts total # 30
|
|
30
|
+
|
|
31
|
+
puts "done"
|