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,86 @@
|
|
|
1
|
+
# Primitives: .inspect as a method call
|
|
2
|
+
|
|
3
|
+
# Integer
|
|
4
|
+
puts 5.inspect
|
|
5
|
+
puts (-42).inspect
|
|
6
|
+
puts 0.inspect
|
|
7
|
+
|
|
8
|
+
# Float
|
|
9
|
+
puts 1.5.inspect
|
|
10
|
+
puts 1.0.inspect
|
|
11
|
+
puts (-3.25).inspect
|
|
12
|
+
|
|
13
|
+
# String
|
|
14
|
+
puts "hi".inspect
|
|
15
|
+
puts "".inspect
|
|
16
|
+
puts "a\nb".inspect
|
|
17
|
+
puts "tab\there".inspect
|
|
18
|
+
puts "quote\"inside".inspect
|
|
19
|
+
puts "back\\slash".inspect
|
|
20
|
+
|
|
21
|
+
# Symbol (regression)
|
|
22
|
+
puts :foo.inspect
|
|
23
|
+
|
|
24
|
+
# Boolean
|
|
25
|
+
puts true.inspect
|
|
26
|
+
puts false.inspect
|
|
27
|
+
|
|
28
|
+
# nil
|
|
29
|
+
puts nil.inspect
|
|
30
|
+
|
|
31
|
+
# Interpolation via explicit .inspect call
|
|
32
|
+
x = 42
|
|
33
|
+
puts "got #{x.inspect}"
|
|
34
|
+
|
|
35
|
+
# Kernel#p equivalence: p obj == puts(obj.inspect) for scalars
|
|
36
|
+
p 5
|
|
37
|
+
p 1.0
|
|
38
|
+
p "hi"
|
|
39
|
+
p :foo
|
|
40
|
+
p true
|
|
41
|
+
p nil
|
|
42
|
+
|
|
43
|
+
# Arrays: .inspect + p
|
|
44
|
+
p []
|
|
45
|
+
p [1, 2, 3]
|
|
46
|
+
p [-5, 0, 42]
|
|
47
|
+
p [99]
|
|
48
|
+
p [1.5, 2.0]
|
|
49
|
+
p [1.0]
|
|
50
|
+
p ["hello", "world"]
|
|
51
|
+
p [""]
|
|
52
|
+
p [:foo, :bar]
|
|
53
|
+
|
|
54
|
+
# Heterogeneous / mixed-type arrays (poly_array)
|
|
55
|
+
p [1, "x"]
|
|
56
|
+
p [nil, :sym, 1.5]
|
|
57
|
+
p [1, "two", :three, 4.0, true]
|
|
58
|
+
p [false, nil]
|
|
59
|
+
|
|
60
|
+
# Mixed arrays as a receiver (inspect / to_s as methods)
|
|
61
|
+
mx = [1, "x"]
|
|
62
|
+
puts mx.inspect
|
|
63
|
+
puts mx.to_s
|
|
64
|
+
|
|
65
|
+
# Array#inspect as a method call
|
|
66
|
+
arr = [1, 2, 3]
|
|
67
|
+
puts arr.inspect
|
|
68
|
+
|
|
69
|
+
# Array#to_s is aliased to Array#inspect in CRuby
|
|
70
|
+
puts arr.to_s
|
|
71
|
+
|
|
72
|
+
# Interpolation uses to_s
|
|
73
|
+
puts "got #{arr.inspect}"
|
|
74
|
+
|
|
75
|
+
# From a method returning an array
|
|
76
|
+
def make_arr; [10, 20, 30]; end
|
|
77
|
+
p make_arr
|
|
78
|
+
|
|
79
|
+
# puts on arrays: flatten, element-per-line (not inspect)
|
|
80
|
+
puts [1, 2, 3]
|
|
81
|
+
puts []
|
|
82
|
+
puts ["a", "b"]
|
|
83
|
+
puts [:x, :y]
|
|
84
|
+
puts [1.5, 2.0]
|
|
85
|
+
|
|
86
|
+
puts "done"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
5
|
|
2
|
+
-42
|
|
3
|
+
0
|
|
4
|
+
1.5
|
|
5
|
+
1.0
|
|
6
|
+
-3.25
|
|
7
|
+
"hi"
|
|
8
|
+
""
|
|
9
|
+
"a\nb"
|
|
10
|
+
"tab\there"
|
|
11
|
+
"quote\"inside"
|
|
12
|
+
"back\\slash"
|
|
13
|
+
:foo
|
|
14
|
+
true
|
|
15
|
+
false
|
|
16
|
+
nil
|
|
17
|
+
got 42
|
|
18
|
+
5
|
|
19
|
+
1.0
|
|
20
|
+
"hi"
|
|
21
|
+
:foo
|
|
22
|
+
true
|
|
23
|
+
nil
|
|
24
|
+
[]
|
|
25
|
+
[1, 2, 3]
|
|
26
|
+
[-5, 0, 42]
|
|
27
|
+
[99]
|
|
28
|
+
[1.5, 2.0]
|
|
29
|
+
[1.0]
|
|
30
|
+
["hello", "world"]
|
|
31
|
+
[""]
|
|
32
|
+
[:foo, :bar]
|
|
33
|
+
[1, "x"]
|
|
34
|
+
[nil, :sym, 1.5]
|
|
35
|
+
[1, "two", :three, 4.0, true]
|
|
36
|
+
[false, nil]
|
|
37
|
+
[1, "x"]
|
|
38
|
+
[1, "x"]
|
|
39
|
+
[1, 2, 3]
|
|
40
|
+
[1, 2, 3]
|
|
41
|
+
got [1, 2, 3]
|
|
42
|
+
[10, 20, 30]
|
|
43
|
+
1
|
|
44
|
+
2
|
|
45
|
+
3
|
|
46
|
+
a
|
|
47
|
+
b
|
|
48
|
+
x
|
|
49
|
+
y
|
|
50
|
+
1.5
|
|
51
|
+
2.0
|
|
52
|
+
done
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Inline-at-call-site arity-0 instance-eval trampoline.
|
|
2
|
+
#
|
|
3
|
+
# Full Ruby instance-eval is dynamic — `self` is rebound at runtime,
|
|
4
|
+
# so AOT compilation needs static type information to resolve method
|
|
5
|
+
# dispatch inside the block. Spinel's compromise: detect the exact
|
|
6
|
+
# DSL trampoline shape `def m(&b); instance_eval(&b); end` at compile
|
|
7
|
+
# time, and inline the block body at the call site with `self`
|
|
8
|
+
# rebound to the receiver. Receiverless calls inside the spliced
|
|
9
|
+
# body dispatch to the receiver's class via static type inference
|
|
10
|
+
# (the new `@instance_eval_self_var` / `@instance_eval_self_type`).
|
|
11
|
+
#
|
|
12
|
+
# Anything other than the arity-0 single-statement shape falls
|
|
13
|
+
# through to the previous silent no-op — by design.
|
|
14
|
+
|
|
15
|
+
# 1. Basic trampoline: `recv.configure { add 10 }` rebinds self to
|
|
16
|
+
# the Builder instance, so `add(10)` resolves as Builder#add.
|
|
17
|
+
class Builder
|
|
18
|
+
def initialize
|
|
19
|
+
@sum = 0
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def add(n)
|
|
23
|
+
@sum = @sum + n
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def total
|
|
27
|
+
@sum
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def configure(&block)
|
|
31
|
+
instance_eval(&block)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
b = Builder.new
|
|
36
|
+
b.configure do
|
|
37
|
+
add(10)
|
|
38
|
+
add(20)
|
|
39
|
+
add(12)
|
|
40
|
+
end
|
|
41
|
+
puts b.total #=> 42
|
|
42
|
+
|
|
43
|
+
# 2. Multiple statements inside the block — each receiverless call
|
|
44
|
+
# dispatches against the rebound class, including reads.
|
|
45
|
+
class Counter
|
|
46
|
+
def initialize
|
|
47
|
+
@n = 0
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def bump
|
|
51
|
+
@n = @n + 1
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def get
|
|
55
|
+
@n
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def with(&block)
|
|
59
|
+
instance_eval(&block)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
c = Counter.new
|
|
64
|
+
c.with do
|
|
65
|
+
bump
|
|
66
|
+
bump
|
|
67
|
+
bump
|
|
68
|
+
end
|
|
69
|
+
puts c.get #=> 3
|
|
70
|
+
|
|
71
|
+
# 3. Nested trampolines compose: an outer Builder#configure block
|
|
72
|
+
# contains an inner Counter#with block. The splicer save/restores
|
|
73
|
+
# @instance_eval_self_var / @instance_eval_self_type, so the
|
|
74
|
+
# outer self is restored after the inner block returns.
|
|
75
|
+
b2 = Builder.new
|
|
76
|
+
c2 = Counter.new
|
|
77
|
+
b2.configure do
|
|
78
|
+
add(7)
|
|
79
|
+
c2.with do
|
|
80
|
+
bump
|
|
81
|
+
bump
|
|
82
|
+
end
|
|
83
|
+
add(35)
|
|
84
|
+
end
|
|
85
|
+
puts b2.total #=> 42
|
|
86
|
+
puts c2.get #=> 2
|
|
87
|
+
|
|
88
|
+
puts "done"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Issue #314 (Roundhouse warnings family): `Integer#[idx]` codegen
|
|
2
|
+
# fired for ANY `[]` call on an int-typed receiver, including the
|
|
3
|
+
# common shape:
|
|
4
|
+
#
|
|
5
|
+
# def self.from_raw(row)
|
|
6
|
+
# instance.id = row[:id] || 0
|
|
7
|
+
# ...
|
|
8
|
+
# end
|
|
9
|
+
#
|
|
10
|
+
# where `row` is an unpinned param whose type defaults to "int". The
|
|
11
|
+
# `row[:id]` then lowered to `(row >> SPS_id) & 1` — shifting a
|
|
12
|
+
# 64-bit int by the symbol's interned id (commonly >= 64) is
|
|
13
|
+
# undefined behavior under -Wshift-count-overflow, and even when it
|
|
14
|
+
# happens to compile the value is garbage.
|
|
15
|
+
#
|
|
16
|
+
# Fix: gate the bit-extract on the index's inferred type. A non-int
|
|
17
|
+
# / non-poly index (typically a Symbol or String literal) is hash /
|
|
18
|
+
# array subscript, never Integer-bit indexing — fall through to
|
|
19
|
+
# the unresolved-call placeholder so the C compile sees the right
|
|
20
|
+
# diagnostic instead of a warning + UB.
|
|
21
|
+
|
|
22
|
+
# Genuine bit indexing — must still work.
|
|
23
|
+
n = 0b1010
|
|
24
|
+
puts n[0] # 0
|
|
25
|
+
puts n[1] # 1
|
|
26
|
+
puts n[2] # 0
|
|
27
|
+
puts n[3] # 1
|
|
28
|
+
|
|
29
|
+
# Hash-subscript shape on an unpinned param — the bug's repro.
|
|
30
|
+
# Without the fix, `row[:k]` emits `(row >> SPS_k) & 1` and gcc/
|
|
31
|
+
# clang flag the shift count. With the fix, this falls through to
|
|
32
|
+
# the unresolved-call placeholder (the param type is unknown to
|
|
33
|
+
# spinel here, since the function is never called), which is the
|
|
34
|
+
# correct behavior — compilation succeeds without the bogus
|
|
35
|
+
# bit-extract.
|
|
36
|
+
def from_raw(row)
|
|
37
|
+
row[:id] || 0
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
puts "compiled-cleanly"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# A Hash literal whose keys are the consecutive non-negative
|
|
2
|
+
# integers 0..N-1 lowers to an internal Array. The runtime has no
|
|
3
|
+
# `int_<X>_hash` slot, so a literal like
|
|
4
|
+
#
|
|
5
|
+
# {0 => [...], 1 => [...]}
|
|
6
|
+
#
|
|
7
|
+
# previously fell through to the str_int_hash default and the
|
|
8
|
+
# `[]` lookup miscompiled (warning: cannot resolve call to
|
|
9
|
+
# 'length' on int — emitting 0 — followed by a runtime segfault
|
|
10
|
+
# when the lookup chain dereferences the literal `0` as a pointer).
|
|
11
|
+
#
|
|
12
|
+
# Detection is AST-shape-only (IntegerNode keys with literal values
|
|
13
|
+
# 0,1,...N-1 in source order). Any deviation (gap key, duplicate
|
|
14
|
+
# key, non-integer key, splat) opts back into the regular
|
|
15
|
+
# str_int_hash codegen, so existing hash literals are unchanged.
|
|
16
|
+
|
|
17
|
+
TBL = {0 => [3, 7, 2, 6], 1 => [4, 0, 5, 1]}
|
|
18
|
+
puts TBL[0].length # 4
|
|
19
|
+
puts TBL[1][2] # 5
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# `arr[start, len] = src` slice-assign where `src` came from
|
|
2
|
+
# `<X>_ptr_array.first` (or `.last`). Spinel's compile_bracket_assign
|
|
3
|
+
# already had a same-prefix slice-assign path for `int_array[i, n] =
|
|
4
|
+
# int_array`, but `infer_type` for `.first` / `.last` fell through
|
|
5
|
+
# to "int" on a `_ptr_array` receiver, so the slice-assign branch's
|
|
6
|
+
# `infer_type(arg_ids[2]) == "int_array"` test missed and the call
|
|
7
|
+
# silently lowered to `arr[start] = len` (using arg_ids[1] as the
|
|
8
|
+
# value, dropping arg_ids[2] entirely).
|
|
9
|
+
|
|
10
|
+
class C
|
|
11
|
+
def initialize
|
|
12
|
+
buf = (0...32).to_a
|
|
13
|
+
@banks = (0...2).map { buf.slice!(0, 8) }
|
|
14
|
+
@ref = [0] * 24
|
|
15
|
+
@ref[5, 8] = @banks.first
|
|
16
|
+
@ref[15, 8] = @banks.last
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def show
|
|
20
|
+
@ref.each { |x| print x, " " }
|
|
21
|
+
puts
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
C.new.show
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0 0 0 0 0 0 1 2 3 4 5 6 7 0 0 8 9 10 11 12 13 14 15 0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# basic
|
|
2
|
+
puts 7.div(2)
|
|
3
|
+
puts 10.div(5)
|
|
4
|
+
|
|
5
|
+
# exact
|
|
6
|
+
puts 6.div(3)
|
|
7
|
+
|
|
8
|
+
# negative — floor division rounds toward -infinity
|
|
9
|
+
puts((-7).div(2))
|
|
10
|
+
puts 7.div(-2)
|
|
11
|
+
puts((-7).div(-2))
|
|
12
|
+
|
|
13
|
+
# zero dividend
|
|
14
|
+
puts 0.div(3)
|
|
15
|
+
|
|
16
|
+
# one
|
|
17
|
+
puts 1.div(1)
|
|
18
|
+
puts((-1).div(1))
|
|
19
|
+
|
|
20
|
+
# large
|
|
21
|
+
puts 1000001.div(1000)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Integer division / modulo / divmod / ceildiv by zero raises
|
|
2
|
+
# ZeroDivisionError. Previously these operations triggered C
|
|
3
|
+
# undefined behaviour (SIGFPE on x86) outside the longjmp net the
|
|
4
|
+
# rescue keyword unwinds — see the now-stale comment in
|
|
5
|
+
# test/endless_method_rescue.rb.
|
|
6
|
+
#
|
|
7
|
+
# Test uses `puts e` directly (which prints the message string in
|
|
8
|
+
# spinel) rather than e.message — the .message dispatch lives on a
|
|
9
|
+
# separate exception-bindings PR. The semantic test (raises and is
|
|
10
|
+
# catchable) is independent.
|
|
11
|
+
|
|
12
|
+
# Bare / catches as ZeroDivisionError
|
|
13
|
+
begin
|
|
14
|
+
x = 10 / 0
|
|
15
|
+
puts "no raise: #{x}"
|
|
16
|
+
rescue ZeroDivisionError => e
|
|
17
|
+
puts "caught div: #{e}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Bare % catches as ZeroDivisionError
|
|
21
|
+
begin
|
|
22
|
+
x = 10 % 0
|
|
23
|
+
puts "no raise: #{x}"
|
|
24
|
+
rescue ZeroDivisionError => e
|
|
25
|
+
puts "caught mod: #{e}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# divmod (covers the inline-/ in compile_int_method_expr)
|
|
29
|
+
begin
|
|
30
|
+
10.divmod(0)
|
|
31
|
+
puts "no raise"
|
|
32
|
+
rescue ZeroDivisionError => e
|
|
33
|
+
puts "caught divmod: #{e}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# ceildiv (was silently returning 0)
|
|
37
|
+
begin
|
|
38
|
+
x = 10.ceildiv(0)
|
|
39
|
+
puts "no raise: #{x}"
|
|
40
|
+
rescue ZeroDivisionError => e
|
|
41
|
+
puts "caught ceildiv: #{e}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# pow with mod=0 (was silently returning 0)
|
|
45
|
+
begin
|
|
46
|
+
x = 2.pow(10, 0)
|
|
47
|
+
puts "no raise: #{x}"
|
|
48
|
+
rescue ZeroDivisionError => e
|
|
49
|
+
puts "caught powmod: #{e}"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# /= compound assignment
|
|
53
|
+
begin
|
|
54
|
+
x = 10
|
|
55
|
+
x /= 0
|
|
56
|
+
puts "no raise: #{x}"
|
|
57
|
+
rescue ZeroDivisionError => e
|
|
58
|
+
puts "caught /=: #{e}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# %= compound assignment
|
|
62
|
+
begin
|
|
63
|
+
x = 10
|
|
64
|
+
x %= 0
|
|
65
|
+
puts "no raise: #{x}"
|
|
66
|
+
rescue ZeroDivisionError => e
|
|
67
|
+
puts "caught %=: #{e}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Bare rescue also catches (no class filter at all).
|
|
71
|
+
begin
|
|
72
|
+
10 / 0
|
|
73
|
+
rescue => e
|
|
74
|
+
puts "bare-rescue: #{e}"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Float division by zero is NOT affected — IEEE 754 returns
|
|
78
|
+
# Infinity / NaN. Spinel matches CRuby; no exception is raised.
|
|
79
|
+
puts (1.0 / 0.0).infinite?
|
|
80
|
+
puts (0.0 / 0.0).nan?
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Method called only inside string interpolation should still anchor its
|
|
2
|
+
# parameter type. Pre-fix: scan_features didn't visit EmbeddedStatementsNode
|
|
3
|
+
# bodies, so `cap(name)` inside `"#{...}"` was the only call site for `cap`,
|
|
4
|
+
# its `s` param defaulted to int, and codegen produced a C compile error.
|
|
5
|
+
|
|
6
|
+
def cap(s)
|
|
7
|
+
s + "_cap"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
name = "frob"
|
|
11
|
+
puts "lv_#{cap(name)}"
|
|
12
|
+
|
|
13
|
+
# Same shape with two args, one of which is also a method call
|
|
14
|
+
def join_with(a, b)
|
|
15
|
+
a + "_" + b
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
x = "hello"
|
|
19
|
+
y = "world"
|
|
20
|
+
puts "wrapped(#{join_with(x, y)})"
|
|
21
|
+
|
|
22
|
+
# Nested interpolation containing a method call whose param widens to int
|
|
23
|
+
def inc(n)
|
|
24
|
+
n + 1
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
puts "next=#{inc(10)}"
|
|
28
|
+
|
|
29
|
+
# Method whose param widens to bool via interpolated boolean call
|
|
30
|
+
def bang(p)
|
|
31
|
+
if p
|
|
32
|
+
"YES"
|
|
33
|
+
else
|
|
34
|
+
"no"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
flag = true
|
|
39
|
+
puts "answer: #{bang(flag)}"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# InterpolatedSymbolNode -- `:"foo_#{x}"`.
|
|
2
|
+
#
|
|
3
|
+
# Lowered to InterpolatedStringNode + sp_intern at codegen side.
|
|
4
|
+
# The parser emits InterpolatedSymbolNode with parts; codegen
|
|
5
|
+
# treats it like InterpolatedStringNode then routes through
|
|
6
|
+
# the intern helper for symbol identity.
|
|
7
|
+
|
|
8
|
+
x = "world"
|
|
9
|
+
sym = :"hello_#{x}"
|
|
10
|
+
puts sym # hello_world
|
|
11
|
+
|
|
12
|
+
n = 42
|
|
13
|
+
sym2 = :"item_#{n}"
|
|
14
|
+
puts sym2 # item_42
|
|
15
|
+
|
|
16
|
+
# Symbol passed through a method
|
|
17
|
+
def kind(s) = s.to_s
|
|
18
|
+
puts kind(:"prefix_#{x}") # prefix_world
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Test respond_to?, is_a?, class name, to_s
|
|
2
|
+
|
|
3
|
+
class Animal
|
|
4
|
+
def initialize(name)
|
|
5
|
+
@name = name
|
|
6
|
+
end
|
|
7
|
+
def name; @name; end
|
|
8
|
+
def speak; "..."; end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Dog < Animal
|
|
12
|
+
def speak; "Woof!"; end
|
|
13
|
+
def fetch; "ball"; end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
d = Dog.new("Rex")
|
|
17
|
+
|
|
18
|
+
# is_a?
|
|
19
|
+
puts d.is_a?(Dog) # true
|
|
20
|
+
puts d.is_a?(Animal) # true
|
|
21
|
+
|
|
22
|
+
# respond_to?
|
|
23
|
+
puts d.respond_to?(:speak) # true
|
|
24
|
+
puts d.respond_to?(:fetch) # true
|
|
25
|
+
puts d.respond_to?(:fly) # false
|
|
26
|
+
|
|
27
|
+
# nil?
|
|
28
|
+
puts nil.nil? # true
|
|
29
|
+
puts d.nil? # false
|
|
30
|
+
puts 0.nil? # false
|
|
31
|
+
|
|
32
|
+
# Integer predicates
|
|
33
|
+
puts 0.zero? # true
|
|
34
|
+
puts 5.positive? # true
|
|
35
|
+
puts (-3).negative? # true
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Issue #176: empty-Hash default parameter `def m(h = {})` used to
|
|
2
|
+
# silently corrupt the caller-supplied Hash because unify_call_types
|
|
3
|
+
# widened the param type to "poly" and the poly dispatch tree had no
|
|
4
|
+
# arm for SymIntHash/StrIntHash. Hash variants now escalate the
|
|
5
|
+
# str_int_hash empty default to the call-site type, mirroring the
|
|
6
|
+
# int_array → typed-array escalation.
|
|
7
|
+
|
|
8
|
+
class A
|
|
9
|
+
def initialize(attrs = {})
|
|
10
|
+
@x = attrs[:x]
|
|
11
|
+
end
|
|
12
|
+
def x; @x; end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
puts A.new({x: 42}).x
|
|
16
|
+
|
|
17
|
+
class B
|
|
18
|
+
def initialize(attrs = {})
|
|
19
|
+
@name = attrs[:name]
|
|
20
|
+
end
|
|
21
|
+
def name; @name; end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
puts B.new({name: "alice"}).name
|
|
25
|
+
|
|
26
|
+
# String-keyed hash also works.
|
|
27
|
+
class C
|
|
28
|
+
def initialize(attrs = {})
|
|
29
|
+
@v = attrs["v"]
|
|
30
|
+
end
|
|
31
|
+
def v; @v; end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
puts C.new({"v" => 7}).v
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Issue #203: `String.new` resolved to 0 because the constructor
|
|
2
|
+
# dispatch had no String arm. Code that combined the result with
|
|
3
|
+
# `<<` (the Rails view-emit accumulator pattern) failed to compile.
|
|
4
|
+
|
|
5
|
+
# Bare String.new — empty mutable buffer.
|
|
6
|
+
io = String.new
|
|
7
|
+
io << "hello"
|
|
8
|
+
puts io # hello
|
|
9
|
+
|
|
10
|
+
# Constructor with seed.
|
|
11
|
+
s = String.new("foo")
|
|
12
|
+
s << "bar"
|
|
13
|
+
puts s # foobar
|
|
14
|
+
|
|
15
|
+
# Empty buffer reads as length 0.
|
|
16
|
+
t = String.new
|
|
17
|
+
puts t.length # 0
|
|
18
|
+
|
|
19
|
+
# Canonical Rails-style accumulator.
|
|
20
|
+
def render(items)
|
|
21
|
+
io = String.new
|
|
22
|
+
io << "<ul>"
|
|
23
|
+
items.each { |item| io << "<li>" << item << "</li>" }
|
|
24
|
+
io << "</ul>"
|
|
25
|
+
io
|
|
26
|
+
end
|
|
27
|
+
puts render(["a", "b"]) # <ul><li>a</li><li>b</li></ul>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Issue #204: user-defined `find` / `fetch` were overridden by the
|
|
2
|
+
# method-name dispatch's "int" fallback even when the receiver
|
|
3
|
+
# wasn't a built-in collection. The body's actual return type
|
|
4
|
+
# (string here) lost; the call site mistyped the result as int.
|
|
5
|
+
|
|
6
|
+
# Class method form (canonical ActiveRecord finder shape).
|
|
7
|
+
class Bag
|
|
8
|
+
def self.find(id); "row-#{id}"; end
|
|
9
|
+
def self.fetch(id); "fetched-#{id}"; end
|
|
10
|
+
end
|
|
11
|
+
puts Bag.find(42) # row-42
|
|
12
|
+
puts Bag.fetch(99) # fetched-99
|
|
13
|
+
|
|
14
|
+
# Instance method form on a hash-wrapping class.
|
|
15
|
+
class C
|
|
16
|
+
def initialize(h); @h = h; end
|
|
17
|
+
def find(key); @h[key.to_sym]; end
|
|
18
|
+
def fetch(key); @h[key.to_sym]; end
|
|
19
|
+
end
|
|
20
|
+
c = C.new({a: "alpha", b: "beta"})
|
|
21
|
+
puts c.find(:a) # alpha
|
|
22
|
+
puts c.fetch(:b) # beta
|
|
23
|
+
|
|
24
|
+
# Built-in collection dispatch still works (regression check).
|
|
25
|
+
puts ["x", "y", "z"].find { |v| v == "y" } # y
|