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,43 @@
|
|
|
1
|
+
# `arr.each {|a, b| ... }` over a poly receiver (an sp_RbVal that
|
|
2
|
+
# carries an array of arrays at runtime) should auto-splat each
|
|
3
|
+
# element across the block params, matching CRuby's
|
|
4
|
+
# `arr.each {|*args| a, b, *_ = args }` shape. Pre-fix the poly
|
|
5
|
+
# branch only assigned `bp1` and dropped `bp2`, so e.g.
|
|
6
|
+
# `[[1, 2], [3, 4]].each {|a, b| sum += a + b }` skipped `b`
|
|
7
|
+
# entirely. Cover both inner kinds the destructuring uses:
|
|
8
|
+
# poly_array (heterogeneous element types) and int_array
|
|
9
|
+
# (homogeneous int element types — what `[i, fixed]` lowers to in
|
|
10
|
+
# optcarrot's `setup_lut`).
|
|
11
|
+
|
|
12
|
+
class C
|
|
13
|
+
def initialize
|
|
14
|
+
@h = {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def push_int(bank, pair)
|
|
18
|
+
# `pair` lowers to int_array because both elements are ints.
|
|
19
|
+
(@h[bank] ||= []) << pair
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def push_poly(bank, pair)
|
|
23
|
+
# `pair` lowers to poly_array because the elements are mixed.
|
|
24
|
+
(@h[bank] ||= []) << pair
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def each_pair(bank)
|
|
28
|
+
arr = @h[bank]
|
|
29
|
+
sum = 0
|
|
30
|
+
arr.each {|a, b| sum += a.to_i + b.to_i }
|
|
31
|
+
sum
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
c = C.new
|
|
36
|
+
c.push_int(0, [10, 20])
|
|
37
|
+
c.push_int(0, [3, 4])
|
|
38
|
+
puts c.each_pair(0) # 10 + 20 + 3 + 4 = 37
|
|
39
|
+
|
|
40
|
+
d = C.new
|
|
41
|
+
d.push_poly(1, [100, "x"]) # b is a string, exercising the poly_array branch
|
|
42
|
+
d.push_poly(1, [5, "y"])
|
|
43
|
+
puts d.each_pair(1) # 100 + 0 + 5 + 0 = 105 (string `to_i` of "x" / "y" = 0)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Array#each_with_object: the seed (second block param) must shadow an
|
|
2
|
+
# outer same-named local of a different type. Without push_scope/
|
|
3
|
+
# declare_var on the seed, infer_type inside the block resolves against
|
|
4
|
+
# the outer binding and dispatches the wrong runtime call.
|
|
5
|
+
|
|
6
|
+
def f
|
|
7
|
+
obj = 42
|
|
8
|
+
out = [1, 2, 3].each_with_object([]) { |x, obj| obj.push(x * 2) }
|
|
9
|
+
puts out[0] # 2
|
|
10
|
+
puts out[1] # 4
|
|
11
|
+
puts out[2] # 6
|
|
12
|
+
puts obj # 42
|
|
13
|
+
end
|
|
14
|
+
f
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Issue #310: an `if/elsif/else` chain with `is_a?(Class)` checks
|
|
2
|
+
# in the elsif branch used to emit `} else <prologue> if (...)`
|
|
3
|
+
# without wrapping braces. The compile_cond_expr for a poly is_a?
|
|
4
|
+
# emits prologue C statements (`sp_RbVal _t = recv; if (_t.tag ==
|
|
5
|
+
# SP_TAG_OBJ) {...}`) before returning the cond flag. Those
|
|
6
|
+
# prologue statements deposited between the bare `else` and the
|
|
7
|
+
# inner `if` — invalid C: the bare-else's body is the next single
|
|
8
|
+
# statement, and the temp decl's scope ended right there.
|
|
9
|
+
#
|
|
10
|
+
# Fix: wrap elsif branches in `{ }`. The cosmetic `else if` is
|
|
11
|
+
# replaced by `else { if ... }` — semantically identical, scope-
|
|
12
|
+
# correct.
|
|
13
|
+
#
|
|
14
|
+
# This test verifies the C *compiles*. Note that is_a?(UserClass)
|
|
15
|
+
# on a poly receiver still has gaps elsewhere (the SP_TAG_OBJ
|
|
16
|
+
# dispatch loop in compile_poly_method_call only walks user-class
|
|
17
|
+
# method tables, none of which define `is_a?`, so the runtime
|
|
18
|
+
# check is conservative — orthogonal to #310's brace bug). All
|
|
19
|
+
# arms below return the same string so the test passes regardless
|
|
20
|
+
# of which branch the runtime picks.
|
|
21
|
+
|
|
22
|
+
class A
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class B
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def normalize(value)
|
|
29
|
+
if value.is_a?(A)
|
|
30
|
+
"ok"
|
|
31
|
+
elsif value.is_a?(B)
|
|
32
|
+
"ok"
|
|
33
|
+
else
|
|
34
|
+
"ok"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
puts normalize(A.new) # ok
|
|
39
|
+
puts normalize(B.new) # ok
|
|
40
|
+
puts normalize(42) # ok
|
|
41
|
+
|
|
42
|
+
# Same shape but as the method's tail-position return — exercises
|
|
43
|
+
# compile_if_return's elsif path (companion fix in the same patch).
|
|
44
|
+
def classify(value)
|
|
45
|
+
if value.is_a?(A)
|
|
46
|
+
1
|
|
47
|
+
elsif value.is_a?(B)
|
|
48
|
+
1
|
|
49
|
+
else
|
|
50
|
+
1
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
puts classify(A.new) # 1
|
|
55
|
+
puts classify(B.new) # 1
|
|
56
|
+
puts classify(99) # 1
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# EmbeddedVariableNode -- `"#$gv"`, `"#@iv"`, `"#@@cv"`.
|
|
2
|
+
#
|
|
3
|
+
# Shorthand interpolation form that skips the braces around a
|
|
4
|
+
# bare variable reference. Lowered at parser side to an
|
|
5
|
+
# EmbeddedStatementsNode wrapping the matching variable read,
|
|
6
|
+
# so the codegen reuses the existing interpolation path.
|
|
7
|
+
|
|
8
|
+
$global = "global!"
|
|
9
|
+
puts "got: #$global" # got: global!
|
|
10
|
+
|
|
11
|
+
class C
|
|
12
|
+
def initialize
|
|
13
|
+
@ivar = "ivar!"
|
|
14
|
+
end
|
|
15
|
+
def show = puts("got: #@ivar")
|
|
16
|
+
end
|
|
17
|
+
C.new.show # got: ivar!
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Empty `[]` literal as parameter — deferred element-type resolution
|
|
2
|
+
# must converge across caller / param / body. Issues #58 (top-level
|
|
3
|
+
# def + instance method) and #84 (inherited dispatch). Was four
|
|
4
|
+
# tests; class names don't collide so the merge is straight
|
|
5
|
+
# concatenation with shared helpers.
|
|
6
|
+
|
|
7
|
+
# === Top-level def, [] passed directly at call site ===
|
|
8
|
+
def push_floats(buf)
|
|
9
|
+
buf.push(1.5)
|
|
10
|
+
buf.push(2.5)
|
|
11
|
+
buf
|
|
12
|
+
end
|
|
13
|
+
result_pf = push_floats([])
|
|
14
|
+
puts result_pf[0] # 1.5
|
|
15
|
+
puts result_pf[1] # 2.5
|
|
16
|
+
|
|
17
|
+
# === Top-level def, [] stored in local first ===
|
|
18
|
+
def collect_names(buf)
|
|
19
|
+
buf.push("alpha")
|
|
20
|
+
buf.push("beta")
|
|
21
|
+
end
|
|
22
|
+
names = []
|
|
23
|
+
collect_names(names)
|
|
24
|
+
puts names[0] # alpha
|
|
25
|
+
puts names[1] # beta
|
|
26
|
+
puts names.length # 2
|
|
27
|
+
|
|
28
|
+
# === Instance method receiving [] — same deferred path ===
|
|
29
|
+
class Recorder
|
|
30
|
+
def record(buf, name)
|
|
31
|
+
buf.push(name)
|
|
32
|
+
buf.push(name + "!")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
r = Recorder.new
|
|
36
|
+
log = []
|
|
37
|
+
r.record(log, "go")
|
|
38
|
+
r.record(log, "stop")
|
|
39
|
+
puts log.length # 4
|
|
40
|
+
puts log[0] # go
|
|
41
|
+
puts log[1] # go!
|
|
42
|
+
puts log[2] # stop
|
|
43
|
+
puts log[3] # stop!
|
|
44
|
+
|
|
45
|
+
# === Inherited dispatch (#84): caller-side inference must walk
|
|
46
|
+
# the inheritance chain to update the *parent's* @cls_meth_ptypes
|
|
47
|
+
# when cls_find_method_direct misses on the child. ===
|
|
48
|
+
class Base
|
|
49
|
+
def add_to(buf)
|
|
50
|
+
buf.push("hi")
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
class Child < Base
|
|
54
|
+
end
|
|
55
|
+
names1 = []
|
|
56
|
+
Child.new.add_to(names1)
|
|
57
|
+
names1.push("more")
|
|
58
|
+
puts names1[0] # hi
|
|
59
|
+
puts names1[1] # more
|
|
60
|
+
|
|
61
|
+
# Two-deep inheritance.
|
|
62
|
+
class Grandchild < Child
|
|
63
|
+
end
|
|
64
|
+
names2 = []
|
|
65
|
+
Grandchild.new.add_to(names2)
|
|
66
|
+
names2.push("again")
|
|
67
|
+
puts names2[0] # hi
|
|
68
|
+
puts names2[1] # again
|
|
69
|
+
|
|
70
|
+
# Class that overrides the inherited slot AND inherits a different
|
|
71
|
+
# defaulted method. The promotion must hit Base2's slot for the
|
|
72
|
+
# inherited `also_add` call, not Mixed's.
|
|
73
|
+
class Base2
|
|
74
|
+
def also_add(buf)
|
|
75
|
+
buf.push("base2")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
class Mixed < Base2
|
|
79
|
+
def add_to(buf)
|
|
80
|
+
buf.push(42)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
ints = []
|
|
85
|
+
Mixed.new.add_to(ints)
|
|
86
|
+
ints.push(7)
|
|
87
|
+
puts ints[0] # 42
|
|
88
|
+
puts ints[1] # 7
|
|
89
|
+
|
|
90
|
+
strs = []
|
|
91
|
+
Mixed.new.also_add(strs)
|
|
92
|
+
strs.push("more")
|
|
93
|
+
puts strs[0] # base2
|
|
94
|
+
puts strs[1] # more
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Issue #64: an ivar initialized as `{}` defaulted to `str_int_hash`,
|
|
2
|
+
# and a later `@h[k] = "string"` write fed `const char *` into
|
|
3
|
+
# `sp_StrIntHash_set` (which expects `mrb_int`). Three pieces of the
|
|
4
|
+
# fix:
|
|
5
|
+
# - scan_writer_calls now recognises `@h[k] = v` against an ivar
|
|
6
|
+
# still typed as the empty-hash default and promotes the slot
|
|
7
|
+
# based on the actual key/value types
|
|
8
|
+
# - the same scanner skips empty `{}` / `[]` writes when re-scanning
|
|
9
|
+
# so the iterative loop doesn't widen the promoted type back to
|
|
10
|
+
# poly via "old=str_str_hash, new=str_int_hash"
|
|
11
|
+
# - both compile_stmt(InstanceVariableWriteNode) and the inline
|
|
12
|
+
# constructor walker route empty `{}` against a promoted ivar to
|
|
13
|
+
# the matching `sp_*Hash_new()` ctor
|
|
14
|
+
|
|
15
|
+
class Sources
|
|
16
|
+
def initialize
|
|
17
|
+
@file_sources = {}
|
|
18
|
+
@current_file = "a.rb"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def add(source)
|
|
22
|
+
@file_sources[@current_file] = source if @current_file
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def lookup(name)
|
|
26
|
+
@file_sources[name]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
s = Sources.new
|
|
31
|
+
s.add("body")
|
|
32
|
+
puts s.lookup("a.rb") # body
|
|
33
|
+
puts s.lookup("missing") # (empty line — string hash default for missing key)
|
|
34
|
+
|
|
35
|
+
# The other key/value-type combos covered by the same promotion path.
|
|
36
|
+
class IntKeyed
|
|
37
|
+
def initialize; @h = {}; end
|
|
38
|
+
def put(k, v); @h[k] = v; end
|
|
39
|
+
def get(k); @h[k]; end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
ik = IntKeyed.new
|
|
43
|
+
ik.put(7, "seven")
|
|
44
|
+
ik.put(42, "forty-two")
|
|
45
|
+
puts ik.get(7) # seven
|
|
46
|
+
puts ik.get(42) # forty-two
|
|
47
|
+
|
|
48
|
+
# Symbol-keyed promotion is also wired through but exercises a
|
|
49
|
+
# pre-existing -Walloc-size-larger-than warning in the runtime
|
|
50
|
+
# `sp_SymIntHash_grow` (unrelated to this issue), so it isn't part
|
|
51
|
+
# of the make-test surface here.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Endless methods (Ruby 3.0+): `def name(args) = expr` is shorthand for
|
|
2
|
+
# a single-expression method body. Prism flattens this to the same
|
|
3
|
+
# DefNode shape as a regular def with a one-statement StatementsNode
|
|
4
|
+
# body, so the existing codegen path supports it transparently. This
|
|
5
|
+
# test pins that contract — if a future Prism upgrade emits a distinct
|
|
6
|
+
# node type (e.g. SingleLineMethodDefinitionNode), the test breaks
|
|
7
|
+
# loudly instead of silently regressing.
|
|
8
|
+
|
|
9
|
+
# 1. Plain integer return.
|
|
10
|
+
def double(x) = x * 2
|
|
11
|
+
puts double(21)
|
|
12
|
+
# 42
|
|
13
|
+
|
|
14
|
+
# 2. String return with interpolation.
|
|
15
|
+
def greet(name) = "hello, #{name}"
|
|
16
|
+
puts greet("world")
|
|
17
|
+
# hello, world
|
|
18
|
+
|
|
19
|
+
# 3. Self-recursive endless method (still expressible, since the body
|
|
20
|
+
# is one expression).
|
|
21
|
+
def fact(n) = n <= 1 ? 1 : n * fact(n - 1)
|
|
22
|
+
puts fact(5)
|
|
23
|
+
# 120
|
|
24
|
+
|
|
25
|
+
# 4. No-arg endless method.
|
|
26
|
+
def answer = 42
|
|
27
|
+
puts answer
|
|
28
|
+
# 42
|
|
29
|
+
|
|
30
|
+
# 5. Endless method using a block-passing call.
|
|
31
|
+
def doubled_max(arr) = arr.map { |x| x * 2 }.max
|
|
32
|
+
puts doubled_max([1, 4, 2])
|
|
33
|
+
# 8
|
|
34
|
+
|
|
35
|
+
# 6. Class endless method (instance + class methods).
|
|
36
|
+
class Box
|
|
37
|
+
def self.unit = 1
|
|
38
|
+
def initialize(v); @v = v; end
|
|
39
|
+
def double = @v * 2
|
|
40
|
+
def name = "Box"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
puts Box.unit
|
|
44
|
+
# 1
|
|
45
|
+
puts Box.new(7).double
|
|
46
|
+
# 14
|
|
47
|
+
puts Box.new(0).name
|
|
48
|
+
# Box
|
|
49
|
+
|
|
50
|
+
# 7. Boolean-returning endless method.
|
|
51
|
+
def positive?(n) = n > 0
|
|
52
|
+
puts positive?(10)
|
|
53
|
+
# true
|
|
54
|
+
puts positive?(-1)
|
|
55
|
+
# false
|
|
56
|
+
|
|
57
|
+
# 8. Method composition (one endless method calling another).
|
|
58
|
+
def square(x) = x * x
|
|
59
|
+
def square_of_sum(a, b) = square(a + b)
|
|
60
|
+
puts square_of_sum(2, 3)
|
|
61
|
+
# 25
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Endless method with rescue modifier:
|
|
2
|
+
# def name(args) = expr rescue fallback
|
|
3
|
+
# Combines `def foo(x) = expr` (already supported) with the postfix
|
|
4
|
+
# `rescue` modifier. This test
|
|
5
|
+
# pins int-typed-return shapes.
|
|
6
|
+
|
|
7
|
+
# Plain endless + rescue with Integer() conversion
|
|
8
|
+
def parse_int(s) = Integer(s) rescue 0
|
|
9
|
+
puts parse_int("42")
|
|
10
|
+
puts parse_int("abc")
|
|
11
|
+
puts parse_int("0")
|
|
12
|
+
puts parse_int("-7")
|
|
13
|
+
|
|
14
|
+
# Explicit-raise rescue trigger. Pre-fix the test was `half(n) = n / 2`,
|
|
15
|
+
# which never raises (0/2 == 0) and so never exercised the rescue path.
|
|
16
|
+
# Uses an explicit raise() so the rescue trigger is independent of the
|
|
17
|
+
# integer-division-by-zero machinery (covered separately in
|
|
18
|
+
# test/integer_div_by_zero.rb). The raise lives inside a helper so the
|
|
19
|
+
# endless body is a single call expression — keeps codegen happy and
|
|
20
|
+
# exercises the cross-frame rescue path.
|
|
21
|
+
def assert_pos(n)
|
|
22
|
+
n < 0 ? raise("negative") : n
|
|
23
|
+
end
|
|
24
|
+
def safe(n) = assert_pos(n) rescue -1
|
|
25
|
+
puts safe(10)
|
|
26
|
+
puts safe(-5)
|
|
27
|
+
puts safe(0)
|
|
28
|
+
|
|
29
|
+
# Nested call with rescue
|
|
30
|
+
def chain(s) = s.to_i + 1 rescue 0
|
|
31
|
+
puts chain("99")
|
|
32
|
+
puts chain("zero")
|
|
33
|
+
puts chain("-1")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Ruby semantics: when both the body and the ensure clause raise,
|
|
2
|
+
# the ensure-raise wins — the original body exception is replaced
|
|
3
|
+
# by the ensure exception as it propagates.
|
|
4
|
+
|
|
5
|
+
class C
|
|
6
|
+
def f
|
|
7
|
+
begin
|
|
8
|
+
raise "original"
|
|
9
|
+
ensure
|
|
10
|
+
raise "from-ensure"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
begin
|
|
16
|
+
C.new.f
|
|
17
|
+
rescue => e
|
|
18
|
+
puts e
|
|
19
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from-ensure
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# When the body of a `begin..ensure..end` raises, the ensure
|
|
2
|
+
# clause must still run before the exception keeps propagating.
|
|
3
|
+
# Previously the generated C had no setjmp around the body, so
|
|
4
|
+
# raise unwound past the ensure entirely.
|
|
5
|
+
|
|
6
|
+
class C
|
|
7
|
+
def initialize
|
|
8
|
+
@cleanup = "no"
|
|
9
|
+
@before_raise = 0
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def f
|
|
13
|
+
begin
|
|
14
|
+
@before_raise = 1
|
|
15
|
+
raise "boom"
|
|
16
|
+
ensure
|
|
17
|
+
@cleanup = "yes"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def report
|
|
22
|
+
begin
|
|
23
|
+
f
|
|
24
|
+
rescue => e
|
|
25
|
+
puts e
|
|
26
|
+
end
|
|
27
|
+
puts @before_raise
|
|
28
|
+
puts @cleanup
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
C.new.report
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Nested `begin..ensure..end` with raise — both ensures must run
|
|
2
|
+
# (inner first, then outer) before the exception reaches the
|
|
3
|
+
# enclosing rescue.
|
|
4
|
+
|
|
5
|
+
class T
|
|
6
|
+
def initialize
|
|
7
|
+
@inner = "no"
|
|
8
|
+
@outer = "no"
|
|
9
|
+
@log = ""
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def f
|
|
13
|
+
begin
|
|
14
|
+
begin
|
|
15
|
+
raise "inner-boom"
|
|
16
|
+
ensure
|
|
17
|
+
@inner = "yes"
|
|
18
|
+
@log = @log + "i"
|
|
19
|
+
end
|
|
20
|
+
ensure
|
|
21
|
+
@outer = "yes"
|
|
22
|
+
@log = @log + "o"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def report
|
|
27
|
+
begin
|
|
28
|
+
f
|
|
29
|
+
rescue => e
|
|
30
|
+
puts e
|
|
31
|
+
end
|
|
32
|
+
puts @inner
|
|
33
|
+
puts @outer
|
|
34
|
+
puts @log
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
T.new.report
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# `begin..ensure..end` must run the ensure clause when the body
|
|
2
|
+
# exits via `return` (bare or with a value). Previously the
|
|
3
|
+
# generated C placed the ensure body *after* the unconditional
|
|
4
|
+
# `return` it followed, so the writeback was dead code.
|
|
5
|
+
|
|
6
|
+
class C
|
|
7
|
+
def initialize
|
|
8
|
+
@x = 0
|
|
9
|
+
@v = 0
|
|
10
|
+
@a = 0
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def bare_return
|
|
14
|
+
begin
|
|
15
|
+
x = 100
|
|
16
|
+
return
|
|
17
|
+
ensure
|
|
18
|
+
@x = x
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def value_return
|
|
23
|
+
begin
|
|
24
|
+
v = 7
|
|
25
|
+
return v * 6
|
|
26
|
+
ensure
|
|
27
|
+
@v = v
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def multi_return(c)
|
|
32
|
+
begin
|
|
33
|
+
a = 1
|
|
34
|
+
if c == 1
|
|
35
|
+
return 11
|
|
36
|
+
end
|
|
37
|
+
a = 2
|
|
38
|
+
if c == 2
|
|
39
|
+
return 22
|
|
40
|
+
end
|
|
41
|
+
a = 3
|
|
42
|
+
ensure
|
|
43
|
+
@a = a
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def report
|
|
48
|
+
bare_return
|
|
49
|
+
puts value_return
|
|
50
|
+
multi_return(1)
|
|
51
|
+
puts "a1=" + @a.to_s
|
|
52
|
+
multi_return(2)
|
|
53
|
+
puts "a2=" + @a.to_s
|
|
54
|
+
multi_return(3)
|
|
55
|
+
puts "a3=" + @a.to_s
|
|
56
|
+
puts @x
|
|
57
|
+
puts @v
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
C.new.report
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# `begin..rescue..ensure..end` — when the rescue body exits via
|
|
2
|
+
# `return`, the ensure clause must still run before the function
|
|
3
|
+
# returns.
|
|
4
|
+
|
|
5
|
+
class C
|
|
6
|
+
def initialize
|
|
7
|
+
@cleanup = "no"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def f
|
|
11
|
+
begin
|
|
12
|
+
raise "boom"
|
|
13
|
+
rescue
|
|
14
|
+
return 99
|
|
15
|
+
ensure
|
|
16
|
+
@cleanup = "yes"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def report
|
|
21
|
+
puts f
|
|
22
|
+
puts @cleanup
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
C.new.report
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Nested `begin..ensure..end` — a `return` inside the inner begin
|
|
2
|
+
# must replay the inner ensure first, then the outer ensure, then
|
|
3
|
+
# return. Both writebacks must take effect, in order.
|
|
4
|
+
|
|
5
|
+
class T
|
|
6
|
+
def initialize
|
|
7
|
+
@inner = 0
|
|
8
|
+
@outer = 0
|
|
9
|
+
@log = ""
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
begin
|
|
14
|
+
a = 1
|
|
15
|
+
begin
|
|
16
|
+
b = 10
|
|
17
|
+
a = 2
|
|
18
|
+
return
|
|
19
|
+
ensure
|
|
20
|
+
@inner = b
|
|
21
|
+
@log = @log + "i"
|
|
22
|
+
end
|
|
23
|
+
ensure
|
|
24
|
+
@outer = a
|
|
25
|
+
@log = @log + "o"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def report
|
|
30
|
+
run
|
|
31
|
+
puts "inner=" + @inner.to_s
|
|
32
|
+
puts "outer=" + @outer.to_s
|
|
33
|
+
puts "log=" + @log
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
T.new.report
|