rubyduino 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitmodules +3 -0
- data/CHANGELOG.md +9 -0
- data/LICENSE.txt +21 -0
- data/README.md +72 -0
- data/Rakefile +12 -0
- data/bin/rubyduino +186 -0
- data/examples/hello.rb +9 -0
- data/lib/rubyduino/arduino_entry.c +9 -0
- data/lib/rubyduino/sp_runtime.h +159 -0
- data/lib/rubyduino/spinel.rb +8 -0
- data/lib/rubyduino/spinel_arduino_codegen.rb +129 -0
- data/lib/rubyduino/version.rb +5 -0
- data/lib/rubyduino.rb +9 -0
- data/sig/rubyduino.rbs +4 -0
- data/vendor/spinel/AUTHORS +1 -0
- data/vendor/spinel/LICENSE +19 -0
- data/vendor/spinel/Makefile +406 -0
- data/vendor/spinel/POLY-AS-SET.md +217 -0
- data/vendor/spinel/README.md +409 -0
- data/vendor/spinel/benchmark/bm_ackermann.rb +12 -0
- data/vendor/spinel/benchmark/bm_ao_render.rb +323 -0
- data/vendor/spinel/benchmark/bm_attr_accessor.rb +41 -0
- data/vendor/spinel/benchmark/bm_bigint_fib.rb +10 -0
- data/vendor/spinel/benchmark/bm_binary_trees.rb +53 -0
- data/vendor/spinel/benchmark/bm_csv_process.rb +58 -0
- data/vendor/spinel/benchmark/bm_fannkuch.rb +88 -0
- data/vendor/spinel/benchmark/bm_fasta.rb +87 -0
- data/vendor/spinel/benchmark/bm_fib.rb +9 -0
- data/vendor/spinel/benchmark/bm_gcbench.rb +73 -0
- data/vendor/spinel/benchmark/bm_getivar.rb +34 -0
- data/vendor/spinel/benchmark/bm_getivar_module.rb +34 -0
- data/vendor/spinel/benchmark/bm_huffman.rb +141 -0
- data/vendor/spinel/benchmark/bm_inline.rb +68 -0
- data/vendor/spinel/benchmark/bm_io_wordcount.rb +57 -0
- data/vendor/spinel/benchmark/bm_json_parse.rb +157 -0
- data/vendor/spinel/benchmark/bm_keyword_args.rb +23 -0
- data/vendor/spinel/benchmark/bm_life.rb +70 -0
- data/vendor/spinel/benchmark/bm_linked_list.rb +75 -0
- data/vendor/spinel/benchmark/bm_loops_times.rb +16 -0
- data/vendor/spinel/benchmark/bm_mandel_term.rb +34 -0
- data/vendor/spinel/benchmark/bm_matmul.rb +42 -0
- data/vendor/spinel/benchmark/bm_nbody.rb +115 -0
- data/vendor/spinel/benchmark/bm_nested_loop.rb +29 -0
- data/vendor/spinel/benchmark/bm_nqueens.rb +46 -0
- data/vendor/spinel/benchmark/bm_object_new.rb +21 -0
- data/vendor/spinel/benchmark/bm_object_new_init.rb +21 -0
- data/vendor/spinel/benchmark/bm_object_new_no_escape.rb +28 -0
- data/vendor/spinel/benchmark/bm_partial_sums.rb +38 -0
- data/vendor/spinel/benchmark/bm_pidigits.rb +31 -0
- data/vendor/spinel/benchmark/bm_rbtree.rb +100 -0
- data/vendor/spinel/benchmark/bm_ruby_xor.rb +28 -0
- data/vendor/spinel/benchmark/bm_send_bmethod.rb +31 -0
- data/vendor/spinel/benchmark/bm_send_cfunc_block.rb +18 -0
- data/vendor/spinel/benchmark/bm_send_rubyfunc_block.rb +23 -0
- data/vendor/spinel/benchmark/bm_setivar.rb +33 -0
- data/vendor/spinel/benchmark/bm_setivar_object.rb +33 -0
- data/vendor/spinel/benchmark/bm_setivar_young.rb +37 -0
- data/vendor/spinel/benchmark/bm_sieve.rb +23 -0
- data/vendor/spinel/benchmark/bm_so_lists.rb +47 -0
- data/vendor/spinel/benchmark/bm_so_mandelbrot.rb +65 -0
- data/vendor/spinel/benchmark/bm_spectral_norm.rb +71 -0
- data/vendor/spinel/benchmark/bm_splay.rb +128 -0
- data/vendor/spinel/benchmark/bm_str_concat.rb +15 -0
- data/vendor/spinel/benchmark/bm_structaref.rb +25 -0
- data/vendor/spinel/benchmark/bm_structaset.rb +24 -0
- data/vendor/spinel/benchmark/bm_sudoku.rb +217 -0
- data/vendor/spinel/benchmark/bm_tak.rb +10 -0
- data/vendor/spinel/benchmark/bm_tarai.rb +10 -0
- data/vendor/spinel/benchmark/bm_template.rb +50 -0
- data/vendor/spinel/benchmark/bm_throw.rb +25 -0
- data/vendor/spinel/benchmark/bm_wordfreq.rb +43 -0
- data/vendor/spinel/docs/FFI.md +198 -0
- data/vendor/spinel/examples/ffi/libm/README.md +24 -0
- data/vendor/spinel/examples/ffi/libm/libm.rb +17 -0
- data/vendor/spinel/examples/ffi/sqlite/README.md +73 -0
- data/vendor/spinel/examples/ffi/sqlite/blog.rb +185 -0
- data/vendor/spinel/examples/ffi/sqlite/sqlite3_lib.rb +46 -0
- data/vendor/spinel/lib/erb.rb +19 -0
- data/vendor/spinel/lib/forwardable.rb +8 -0
- data/vendor/spinel/lib/mruby_shim.h +118 -0
- data/vendor/spinel/lib/optparse.rb +123 -0
- data/vendor/spinel/lib/regexp/re_compile.c +979 -0
- data/vendor/spinel/lib/regexp/re_exec.c +665 -0
- data/vendor/spinel/lib/regexp/re_internal.h +146 -0
- data/vendor/spinel/lib/regexp/re_utf8.c +76 -0
- data/vendor/spinel/lib/set.rb +12 -0
- data/vendor/spinel/lib/sp_bigint.c +5400 -0
- data/vendor/spinel/lib/sp_bigint.h +117 -0
- data/vendor/spinel/lib/sp_runtime.h +1361 -0
- data/vendor/spinel/lib/stringio.c +286 -0
- data/vendor/spinel/lib/stringio.rb +5 -0
- data/vendor/spinel/lib/strscan.c +170 -0
- data/vendor/spinel/lib/strscan.rb +55 -0
- data/vendor/spinel/spinel +191 -0
- data/vendor/spinel/spinel.bat +158 -0
- data/vendor/spinel/spinel_codegen.rb +39906 -0
- data/vendor/spinel/spinel_parse +0 -0
- data/vendor/spinel/spinel_parse.c +1586 -0
- data/vendor/spinel/test/alias_global.rb +16 -0
- data/vendor/spinel/test/alias_global.rb.expected +3 -0
- data/vendor/spinel/test/alias_method.rb +28 -0
- data/vendor/spinel/test/alias_method.rb.expected +5 -0
- data/vendor/spinel/test/and_node_poly_operand.rb +24 -0
- data/vendor/spinel/test/anon_block_forward.rb +47 -0
- data/vendor/spinel/test/anon_block_forward.rb.expected +4 -0
- data/vendor/spinel/test/array_3d_nested.rb +48 -0
- data/vendor/spinel/test/array_clear_typed.rb +40 -0
- data/vendor/spinel/test/array_clear_typed.rb.expected +7 -0
- data/vendor/spinel/test/array_concat.rb +18 -0
- data/vendor/spinel/test/array_concat.rb.expected +2 -0
- data/vendor/spinel/test/array_each_with_object.rb +17 -0
- data/vendor/spinel/test/array_each_with_object.rb.expected +2 -0
- data/vendor/spinel/test/array_fill_poly.rb +17 -0
- data/vendor/spinel/test/array_flat_map.rb +16 -0
- data/vendor/spinel/test/array_flat_map.rb.expected +2 -0
- data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb +29 -0
- data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb.expected +6 -0
- data/vendor/spinel/test/array_method_name_clash.rb +15 -0
- data/vendor/spinel/test/array_method_name_clash.rb.expected +1 -0
- data/vendor/spinel/test/array_new_block_typed_container.rb +37 -0
- data/vendor/spinel/test/array_new_block_typed_container.rb.expected +7 -0
- data/vendor/spinel/test/array_new_empty_inner_deferred.rb +47 -0
- data/vendor/spinel/test/array_new_empty_inner_deferred.rb.expected +8 -0
- data/vendor/spinel/test/array_partition_gc.rb +20 -0
- data/vendor/spinel/test/array_partition_gc.rb.expected +3 -0
- data/vendor/spinel/test/array_plus.rb +18 -0
- data/vendor/spinel/test/array_plus.rb.expected +2 -0
- data/vendor/spinel/test/array_rotate_bang.rb +54 -0
- data/vendor/spinel/test/array_rotate_bang.rb.expected +34 -0
- data/vendor/spinel/test/array_shuffle_ptr.rb +11 -0
- data/vendor/spinel/test/array_shuffle_ptr.rb.expected +1 -0
- data/vendor/spinel/test/array_slice_bang.rb +81 -0
- data/vendor/spinel/test/array_slice_bang.rb.expected +40 -0
- data/vendor/spinel/test/attr.rb +77 -0
- data/vendor/spinel/test/attr.rb.expected +9 -0
- data/vendor/spinel/test/attr_writer_poly_box.rb +24 -0
- data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb +29 -0
- data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb.expected +3 -0
- data/vendor/spinel/test/attr_writer_returns_rhs.rb +23 -0
- data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb +38 -0
- data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb.expected +3 -0
- data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb +36 -0
- data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb.expected +2 -0
- data/vendor/spinel/test/back_ref.rb +21 -0
- data/vendor/spinel/test/back_ref.rb.expected +6 -0
- data/vendor/spinel/test/bare_return_in_cls_method.rb +46 -0
- data/vendor/spinel/test/bare_return_in_cls_method.rb.expected +2 -0
- data/vendor/spinel/test/bare_return_in_initialize.rb +55 -0
- data/vendor/spinel/test/bare_return_in_initialize.rb.expected +4 -0
- data/vendor/spinel/test/bare_return_in_poly_method.rb +26 -0
- data/vendor/spinel/test/bare_return_in_poly_method.rb.expected +2 -0
- data/vendor/spinel/test/bigint_div_by_zero.rb +43 -0
- data/vendor/spinel/test/bigint_div_by_zero.rb.expected +3 -0
- data/vendor/spinel/test/block2.rb +31 -0
- data/vendor/spinel/test/block2.rb.expected +4 -0
- data/vendor/spinel/test/block_forward_block_arg.rb +60 -0
- data/vendor/spinel/test/block_forward_block_arg.rb.expected +4 -0
- data/vendor/spinel/test/block_forward_recv_typed.rb +82 -0
- data/vendor/spinel/test/block_forward_recv_typed.rb.expected +11 -0
- data/vendor/spinel/test/block_forward_self_call.rb +61 -0
- data/vendor/spinel/test/block_forward_self_call.rb.expected +6 -0
- data/vendor/spinel/test/block_given_block_param.rb +46 -0
- data/vendor/spinel/test/block_given_block_param.rb.expected +3 -0
- data/vendor/spinel/test/block_param_shadow.rb +246 -0
- data/vendor/spinel/test/block_param_shadow.rb.expected +71 -0
- data/vendor/spinel/test/bm_instance_eval.rb +209 -0
- data/vendor/spinel/test/bm_instance_eval.rb.expected +27 -0
- data/vendor/spinel/test/bound_method_array.rb +22 -0
- data/vendor/spinel/test/bound_method_array.rb.expected +4 -0
- data/vendor/spinel/test/bound_method_basic.rb +27 -0
- data/vendor/spinel/test/bound_method_basic.rb.expected +2 -0
- data/vendor/spinel/test/bound_method_gc.rb +30 -0
- data/vendor/spinel/test/bound_method_gc.rb.expected +1 -0
- data/vendor/spinel/test/bound_method_obj_recv.rb +41 -0
- data/vendor/spinel/test/bound_method_obj_recv.rb.expected +4 -0
- data/vendor/spinel/test/bound_method_single_eval.rb +37 -0
- data/vendor/spinel/test/bound_method_single_eval.rb.expected +4 -0
- data/vendor/spinel/test/box_pointer_to_poly.rb +27 -0
- data/vendor/spinel/test/box_pointer_to_poly.rb.expected +1 -0
- data/vendor/spinel/test/box_unbox_local_assign_cond.rb +22 -0
- data/vendor/spinel/test/box_unbox_local_assign_cond.rb.expected +2 -0
- data/vendor/spinel/test/bundle_array_a.rb +400 -0
- data/vendor/spinel/test/bundle_array_a.rb.expected +117 -0
- data/vendor/spinel/test/bundle_array_b.rb +369 -0
- data/vendor/spinel/test/bundle_array_b.rb.expected +136 -0
- data/vendor/spinel/test/bundle_array_c.rb +146 -0
- data/vendor/spinel/test/bundle_array_c.rb.expected +51 -0
- data/vendor/spinel/test/bundle_array_d.rb +181 -0
- data/vendor/spinel/test/bundle_array_d.rb.expected +66 -0
- data/vendor/spinel/test/bundle_hash.rb +328 -0
- data/vendor/spinel/test/bundle_hash.rb.expected +104 -0
- data/vendor/spinel/test/bundle_int_array.rb +125 -0
- data/vendor/spinel/test/bundle_int_array.rb.expected +24 -0
- data/vendor/spinel/test/bundle_integer.rb +248 -0
- data/vendor/spinel/test/bundle_integer.rb.expected +113 -0
- data/vendor/spinel/test/bundle_io_sys.rb +223 -0
- data/vendor/spinel/test/bundle_io_sys.rb.expected +62 -0
- data/vendor/spinel/test/bundle_misc_a.rb +462 -0
- data/vendor/spinel/test/bundle_misc_a.rb.expected +208 -0
- data/vendor/spinel/test/bundle_misc_b.rb +401 -0
- data/vendor/spinel/test/bundle_misc_b.rb.expected +120 -0
- data/vendor/spinel/test/bundle_poly.rb +145 -0
- data/vendor/spinel/test/bundle_poly.rb.expected +66 -0
- data/vendor/spinel/test/bundle_string_a.rb +278 -0
- data/vendor/spinel/test/bundle_string_a.rb.expected +93 -0
- data/vendor/spinel/test/bundle_string_b.rb +226 -0
- data/vendor/spinel/test/bundle_string_b.rb.expected +83 -0
- data/vendor/spinel/test/bundle_sym.rb +302 -0
- data/vendor/spinel/test/bundle_sym.rb.expected +117 -0
- data/vendor/spinel/test/call_and_write.rb +28 -0
- data/vendor/spinel/test/call_and_write.rb.expected +3 -0
- data/vendor/spinel/test/call_arg_int_to_obj_cast.rb +55 -0
- data/vendor/spinel/test/call_arg_int_to_obj_cast.rb.expected +1 -0
- data/vendor/spinel/test/call_op_write.rb +51 -0
- data/vendor/spinel/test/call_op_write.rb.expected +11 -0
- data/vendor/spinel/test/call_or_write.rb +35 -0
- data/vendor/spinel/test/call_or_write.rb.expected +3 -0
- data/vendor/spinel/test/case.rb +43 -0
- data/vendor/spinel/test/case.rb.expected +10 -0
- data/vendor/spinel/test/case_string_when_sym_no_match.rb +59 -0
- data/vendor/spinel/test/case_string_when_sym_no_match.rb.expected +7 -0
- data/vendor/spinel/test/case_when_class.rb +70 -0
- data/vendor/spinel/test/case_when_class.rb.expected +5 -0
- data/vendor/spinel/test/chained_attr_setter.rb +55 -0
- data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb +28 -0
- data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb.expected +3 -0
- data/vendor/spinel/test/chained_ivar_write_call_rhs.rb +30 -0
- data/vendor/spinel/test/chained_ivar_write_call_rhs.rb.expected +2 -0
- data/vendor/spinel/test/chained_ivar_write_split.rb +26 -0
- data/vendor/spinel/test/chained_ivar_write_split.rb.expected +3 -0
- data/vendor/spinel/test/chained_ivar_write_subclass.rb +26 -0
- data/vendor/spinel/test/chained_ivar_write_subclass.rb.expected +2 -0
- data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb +32 -0
- data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb.expected +3 -0
- data/vendor/spinel/test/chained_or_assign_collection_element.rb +29 -0
- data/vendor/spinel/test/chained_or_assign_collection_element.rb.expected +2 -0
- data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb +25 -0
- data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb.expected +3 -0
- data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb +24 -0
- data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb.expected +3 -0
- data/vendor/spinel/test/class_constant_path_read.rb +26 -0
- data/vendor/spinel/test/class_constant_path_read.rb.expected +4 -0
- data/vendor/spinel/test/class_constant_sym_array.rb +19 -0
- data/vendor/spinel/test/class_constant_sym_array.rb.expected +4 -0
- data/vendor/spinel/test/class_def_order.rb +66 -0
- data/vendor/spinel/test/class_def_order.rb.expected +4 -0
- data/vendor/spinel/test/class_method_open_class_call.rb +31 -0
- data/vendor/spinel/test/class_method_open_class_call.rb.expected +3 -0
- data/vendor/spinel/test/class_var_read.rb +113 -0
- data/vendor/spinel/test/class_var_read.rb.expected +8 -0
- data/vendor/spinel/test/class_var_write.rb +19 -0
- data/vendor/spinel/test/class_var_write.rb.expected +1 -0
- data/vendor/spinel/test/cls_ivar_type_parent_defer.rb +32 -0
- data/vendor/spinel/test/cls_method_object.rb +31 -0
- data/vendor/spinel/test/cls_method_object.rb.expected +2 -0
- data/vendor/spinel/test/codegen_class_in_module_with_explicit_parent.rb +15 -0
- data/vendor/spinel/test/codegen_class_in_module_with_explicit_parent.rb.expected +1 -0
- data/vendor/spinel/test/codegen_const_lookup_in_toplevel_method.rb +13 -0
- data/vendor/spinel/test/codegen_const_lookup_in_toplevel_method.rb.expected +1 -0
- data/vendor/spinel/test/comparable.rb +21 -0
- data/vendor/spinel/test/comparable.rb.expected +5 -0
- data/vendor/spinel/test/const_init_block_param_scan.rb +13 -0
- data/vendor/spinel/test/const_init_block_param_scan.rb.expected +2 -0
- data/vendor/spinel/test/constant_path.rb +102 -0
- data/vendor/spinel/test/constant_path.rb.expected +21 -0
- data/vendor/spinel/test/constants.rb +44 -0
- data/vendor/spinel/test/constants.rb.expected +13 -0
- data/vendor/spinel/test/control.rb +23 -0
- data/vendor/spinel/test/control.rb.expected +7 -0
- data/vendor/spinel/test/default_args.rb +108 -0
- data/vendor/spinel/test/default_args.rb.expected +13 -0
- data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb +32 -0
- data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb.expected +1 -0
- data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb +43 -0
- data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb.expected +2 -0
- data/vendor/spinel/test/each_with_object_seed_shadow.rb +14 -0
- data/vendor/spinel/test/each_with_object_seed_shadow.rb.expected +4 -0
- data/vendor/spinel/test/elsif_isa_chain.rb +56 -0
- data/vendor/spinel/test/elsif_isa_chain.rb.expected +6 -0
- data/vendor/spinel/test/embedded_var.rb +17 -0
- data/vendor/spinel/test/embedded_var.rb.expected +2 -0
- data/vendor/spinel/test/empty_array_param.rb +94 -0
- data/vendor/spinel/test/empty_array_param.rb.expected +18 -0
- data/vendor/spinel/test/empty_hash_ivar_string_value.rb +51 -0
- data/vendor/spinel/test/empty_hash_ivar_string_value.rb.expected +4 -0
- data/vendor/spinel/test/endless_method.rb +61 -0
- data/vendor/spinel/test/endless_method.rb.expected +11 -0
- data/vendor/spinel/test/endless_method_rescue.rb +33 -0
- data/vendor/spinel/test/endless_method_rescue.rb.expected +10 -0
- data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb +19 -0
- data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb.expected +1 -0
- data/vendor/spinel/test/ensure_runs_on_raise.rb +32 -0
- data/vendor/spinel/test/ensure_runs_on_raise.rb.expected +3 -0
- data/vendor/spinel/test/ensure_runs_on_raise_nested.rb +38 -0
- data/vendor/spinel/test/ensure_runs_on_raise_nested.rb.expected +4 -0
- data/vendor/spinel/test/ensure_runs_on_return.rb +61 -0
- data/vendor/spinel/test/ensure_runs_on_return.rb.expected +6 -0
- data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb +26 -0
- data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb.expected +2 -0
- data/vendor/spinel/test/ensure_runs_on_return_nested.rb +37 -0
- data/vendor/spinel/test/ensure_runs_on_return_nested.rb.expected +3 -0
- data/vendor/spinel/test/enumerable.rb +19 -0
- data/vendor/spinel/test/enumerable.rb.expected +2 -0
- data/vendor/spinel/test/env_string_inference.rb +37 -0
- data/vendor/spinel/test/env_string_inference.rb.expected +6 -0
- data/vendor/spinel/test/exception_object_methods.rb +99 -0
- data/vendor/spinel/test/exception_object_methods.rb.expected +15 -0
- data/vendor/spinel/test/exceptions.rb +34 -0
- data/vendor/spinel/test/exceptions.rb.expected +4 -0
- data/vendor/spinel/test/features.rb +32 -0
- data/vendor/spinel/test/features.rb.expected +9 -0
- data/vendor/spinel/test/ffi_buffer_reader.rb +23 -0
- data/vendor/spinel/test/ffi_buffer_reader.rb.expected +5 -0
- data/vendor/spinel/test/ffi_const.rb +12 -0
- data/vendor/spinel/test/ffi_const.rb.expected +5 -0
- data/vendor/spinel/test/ffi_libc_libm_basic.rb +16 -0
- data/vendor/spinel/test/ffi_libc_libm_basic.rb.expected +5 -0
- data/vendor/spinel/test/ffi_ptr_nil.rb +27 -0
- data/vendor/spinel/test/ffi_ptr_nil.rb.expected +2 -0
- data/vendor/spinel/test/ffi_void_return.rb +14 -0
- data/vendor/spinel/test/ffi_void_return.rb.expected +2 -0
- data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb +22 -0
- data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb.expected +3 -0
- data/vendor/spinel/test/fiber_yield_across_method_call.rb +28 -0
- data/vendor/spinel/test/fiber_yield_across_method_call.rb.expected +3 -0
- data/vendor/spinel/test/file_basename_gc.rb +59 -0
- data/vendor/spinel/test/file_basename_gc.rb.expected +2 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init.rb +36 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb +32 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb +41 -0
- data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_int_array.rb +26 -0
- data/vendor/spinel/test/forward_call_class_method_int_array.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_nested.rb +35 -0
- data/vendor/spinel/test/forward_call_class_method_nested.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_class_method_obj.rb +36 -0
- data/vendor/spinel/test/forward_call_class_method_obj.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_param_type_inference.rb +23 -0
- data/vendor/spinel/test/forward_call_param_type_inference.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_param_type_int_array.rb +34 -0
- data/vendor/spinel/test/forward_call_param_type_int_array.rb.expected +1 -0
- data/vendor/spinel/test/forward_call_param_type_obj.rb +38 -0
- data/vendor/spinel/test/forward_call_param_type_obj.rb.expected +1 -0
- data/vendor/spinel/test/gc_root_ptr_array_literal.rb +63 -0
- data/vendor/spinel/test/gc_root_ptr_array_literal.rb.expected +1 -0
- data/vendor/spinel/test/gc_save_double_in_new.rb +13 -0
- data/vendor/spinel/test/gc_save_double_in_new.rb.expected +1 -0
- data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb +54 -0
- data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb.expected +2 -0
- data/vendor/spinel/test/global_var.rb +53 -0
- data/vendor/spinel/test/global_var.rb.expected +12 -0
- data/vendor/spinel/test/gvar.rb +22 -0
- data/vendor/spinel/test/gvar.rb.expected +4 -0
- data/vendor/spinel/test/hash_dig.rb +92 -0
- data/vendor/spinel/test/hash_dig.rb.expected +37 -0
- data/vendor/spinel/test/hash_keys_each_shadow.rb +40 -0
- data/vendor/spinel/test/hash_keys_each_shadow.rb.expected +9 -0
- data/vendor/spinel/test/hash_shorthand.rb +37 -0
- data/vendor/spinel/test/hash_shorthand.rb.expected +6 -0
- data/vendor/spinel/test/hash_shorthand_str.rb +48 -0
- data/vendor/spinel/test/hash_shorthand_str.rb.expected +19 -0
- data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb +46 -0
- data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb.expected +2 -0
- data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb +50 -0
- data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb.expected +3 -0
- data/vendor/spinel/test/implicit_self_param_poly.rb +17 -0
- data/vendor/spinel/test/implicit_self_param_poly.rb.expected +1 -0
- data/vendor/spinel/test/index_write.rb +106 -0
- data/vendor/spinel/test/index_write.rb.expected +30 -0
- data/vendor/spinel/test/inference_method_set.rb +35 -0
- data/vendor/spinel/test/inference_method_set.rb.expected +2 -0
- data/vendor/spinel/test/inherit.rb +52 -0
- data/vendor/spinel/test/inherit.rb.expected +7 -0
- data/vendor/spinel/test/inherited_method_param_widen.rb +49 -0
- data/vendor/spinel/test/inherited_method_param_widen.rb.expected +1 -0
- data/vendor/spinel/test/init_locals.rb +43 -0
- data/vendor/spinel/test/init_locals.rb.expected +3 -0
- data/vendor/spinel/test/initialize_param_poly_call_sites.rb +20 -0
- data/vendor/spinel/test/initialize_param_poly_call_sites.rb.expected +2 -0
- data/vendor/spinel/test/initialize_param_through_call.rb +15 -0
- data/vendor/spinel/test/initialize_param_through_call.rb.expected +1 -0
- data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb +40 -0
- data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb.expected +1 -0
- data/vendor/spinel/test/inspect.rb +86 -0
- data/vendor/spinel/test/inspect.rb.expected +52 -0
- data/vendor/spinel/test/instance_eval_trampoline.rb +88 -0
- data/vendor/spinel/test/instance_eval_trampoline.rb.expected +5 -0
- data/vendor/spinel/test/int_bracket_skip_sym_idx.rb +40 -0
- data/vendor/spinel/test/int_bracket_skip_sym_idx.rb.expected +5 -0
- data/vendor/spinel/test/int_keyed_hash_lookup_as_array.rb +19 -0
- data/vendor/spinel/test/int_keyed_hash_lookup_as_array.rb.expected +2 -0
- data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb +25 -0
- data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb.expected +1 -0
- data/vendor/spinel/test/integer_div.rb +21 -0
- data/vendor/spinel/test/integer_div.rb.expected +10 -0
- data/vendor/spinel/test/integer_div_by_zero.rb +80 -0
- data/vendor/spinel/test/integer_div_by_zero.rb.expected +10 -0
- data/vendor/spinel/test/interp_method_widening.rb +39 -0
- data/vendor/spinel/test/interp_method_widening.rb.expected +4 -0
- data/vendor/spinel/test/interp_symbol.rb +18 -0
- data/vendor/spinel/test/interp_symbol.rb.expected +3 -0
- data/vendor/spinel/test/introspect.rb +35 -0
- data/vendor/spinel/test/introspect.rb.expected +11 -0
- data/vendor/spinel/test/issue176_empty_hash_default.rb +34 -0
- data/vendor/spinel/test/issue176_empty_hash_default.rb.expected +3 -0
- data/vendor/spinel/test/issue203_string_new.rb +27 -0
- data/vendor/spinel/test/issue203_string_new.rb.expected +4 -0
- data/vendor/spinel/test/issue204_user_find_fetch.rb +25 -0
- data/vendor/spinel/test/issue204_user_find_fetch.rb.expected +5 -0
- data/vendor/spinel/test/issue207_factory_pattern.rb +35 -0
- data/vendor/spinel/test/issue207_factory_pattern.rb.expected +1 -0
- data/vendor/spinel/test/issue207_full_repro.rb +52 -0
- data/vendor/spinel/test/issue207_full_repro.rb.expected +1 -0
- data/vendor/spinel/test/issue208_inherited_class_method.rb +24 -0
- data/vendor/spinel/test/issue208_inherited_class_method.rb.expected +4 -0
- data/vendor/spinel/test/issue219_aref_chain.rb +36 -0
- data/vendor/spinel/test/issue219_aref_chain.rb.expected +5 -0
- data/vendor/spinel/test/issue224_bare_new_inherited.rb +66 -0
- data/vendor/spinel/test/issue224_bare_new_inherited.rb.expected +4 -0
- data/vendor/spinel/test/issue229_uncalled_cls_method.rb +76 -0
- data/vendor/spinel/test/issue229_uncalled_cls_method.rb.expected +3 -0
- data/vendor/spinel/test/issue235_chain_tail_widening.rb +48 -0
- data/vendor/spinel/test/issue235_chain_tail_widening.rb.expected +5 -0
- data/vendor/spinel/test/issue236_chain_empty_literal.rb +84 -0
- data/vendor/spinel/test/issue236_chain_empty_literal.rb.expected +7 -0
- data/vendor/spinel/test/issue239_cls_method_default_args.rb +41 -0
- data/vendor/spinel/test/issue239_cls_method_default_args.rb.expected +5 -0
- data/vendor/spinel/test/issue_266_def_length_inference.rb +63 -0
- data/vendor/spinel/test/issue_266_def_length_inference.rb.expected +1 -0
- data/vendor/spinel/test/ivar_and_write_basic.rb +34 -0
- data/vendor/spinel/test/ivar_and_write_basic.rb.expected +5 -0
- data/vendor/spinel/test/ivar_c_keyword.rb +14 -0
- data/vendor/spinel/test/ivar_c_keyword.rb.expected +1 -0
- data/vendor/spinel/test/ivar_float_array.rb +59 -0
- data/vendor/spinel/test/ivar_float_array.rb.expected +11 -0
- data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb +22 -0
- data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb.expected +6 -0
- data/vendor/spinel/test/ivar_or_write_basic.rb +57 -0
- data/vendor/spinel/test/ivar_or_write_basic.rb.expected +9 -0
- data/vendor/spinel/test/ivar_polymorphic.rb +87 -0
- data/vendor/spinel/test/ivar_polymorphic.rb.expected +12 -0
- data/vendor/spinel/test/ivar_ternary_mixed.rb +108 -0
- data/vendor/spinel/test/ivar_ternary_mixed.rb.expected +15 -0
- data/vendor/spinel/test/ivar_writer_heterogeneity.rb +34 -0
- data/vendor/spinel/test/ivar_writer_heterogeneity.rb.expected +2 -0
- data/vendor/spinel/test/known_constants.rb +25 -0
- data/vendor/spinel/test/known_constants.rb.expected +4 -0
- data/vendor/spinel/test/kw_nil_default_string_call.rb +6 -0
- data/vendor/spinel/test/kw_nil_default_string_call.rb.expected +2 -0
- data/vendor/spinel/test/kwargs.rb +21 -0
- data/vendor/spinel/test/kwargs.rb.expected +6 -0
- data/vendor/spinel/test/kwargs_param.rb +26 -0
- data/vendor/spinel/test/kwargs_param.rb.expected +2 -0
- data/vendor/spinel/test/kwargs_param_widen.rb +73 -0
- data/vendor/spinel/test/kwargs_param_widen.rb.expected +3 -0
- data/vendor/spinel/test/lrama_features.rb +142 -0
- data/vendor/spinel/test/lrama_features.rb.expected +38 -0
- data/vendor/spinel/test/map_array_block_result.rb +29 -0
- data/vendor/spinel/test/map_array_block_result.rb.expected +2 -0
- data/vendor/spinel/test/map_block_returns_nested_array.rb +53 -0
- data/vendor/spinel/test/map_empty_block.rb +26 -0
- data/vendor/spinel/test/map_empty_block.rb.expected +6 -0
- data/vendor/spinel/test/map_range_recv_array_block.rb +31 -0
- data/vendor/spinel/test/mega.rb +35 -0
- data/vendor/spinel/test/mega.rb.expected +7 -0
- data/vendor/spinel/test/method.rb +21 -0
- data/vendor/spinel/test/method.rb.expected +6 -0
- data/vendor/spinel/test/method_defined.rb +36 -0
- data/vendor/spinel/test/method_defined.rb.expected +17 -0
- data/vendor/spinel/test/method_dispatch_poly_array.rb +35 -0
- data/vendor/spinel/test/method_dispatch_poly_array.rb.expected +2 -0
- data/vendor/spinel/test/method_introspection.rb +24 -0
- data/vendor/spinel/test/method_introspection.rb.expected +6 -0
- data/vendor/spinel/test/method_param_unify_to_poly.rb +40 -0
- data/vendor/spinel/test/method_param_unify_to_poly.rb.expected +2 -0
- data/vendor/spinel/test/misc.rb +49 -0
- data/vendor/spinel/test/misc.rb.expected +7 -0
- data/vendor/spinel/test/mixin.rb +54 -0
- data/vendor/spinel/test/mixin.rb.expected +4 -0
- data/vendor/spinel/test/module_acc_dispatch_param_box.rb +46 -0
- data/vendor/spinel/test/module_acc_dispatch_param_box.rb.expected +2 -0
- data/vendor/spinel/test/module_class_new.rb +17 -0
- data/vendor/spinel/test/module_class_new.rb.expected +3 -0
- data/vendor/spinel/test/module_cls_method_string_return.rb +53 -0
- data/vendor/spinel/test/module_cls_method_string_return.rb.expected +5 -0
- data/vendor/spinel/test/module_const_array_widen.rb +36 -0
- data/vendor/spinel/test/module_const_array_widen.rb.expected +1 -0
- data/vendor/spinel/test/module_dispatch_param_widen.rb +55 -0
- data/vendor/spinel/test/module_dispatch_param_widen.rb.expected +1 -0
- data/vendor/spinel/test/module_function_namespace.rb +58 -0
- data/vendor/spinel/test/module_ivar_hash.rb +61 -0
- data/vendor/spinel/test/module_ivar_hash.rb.expected +7 -0
- data/vendor/spinel/test/module_relative_constant_path.rb +26 -0
- data/vendor/spinel/test/module_relative_constant_path.rb.expected +2 -0
- data/vendor/spinel/test/module_singleton_accessor.rb +65 -0
- data/vendor/spinel/test/module_singleton_accessor.rb.expected +3 -0
- data/vendor/spinel/test/module_singleton_accessor_poly.rb +62 -0
- data/vendor/spinel/test/module_singleton_accessor_poly.rb.expected +7 -0
- data/vendor/spinel/test/multi_arg_block_call.rb +56 -0
- data/vendor/spinel/test/multi_arg_block_call.rb.expected +5 -0
- data/vendor/spinel/test/multi_arg_yield.rb +70 -0
- data/vendor/spinel/test/multi_arg_yield.rb.expected +6 -0
- data/vendor/spinel/test/multi_assign_ivar.rb +33 -0
- data/vendor/spinel/test/multi_assign_ivar.rb.expected +1 -0
- data/vendor/spinel/test/multi_return.rb +35 -0
- data/vendor/spinel/test/multi_return.rb.expected +10 -0
- data/vendor/spinel/test/multi_return_bare.rb +77 -0
- data/vendor/spinel/test/multi_return_bare.rb.expected +16 -0
- data/vendor/spinel/test/multi_write_const.rb +36 -0
- data/vendor/spinel/test/multi_write_const.rb.expected +9 -0
- data/vendor/spinel/test/multi_write_from_poly_recv.rb +34 -0
- data/vendor/spinel/test/multi_write_from_poly_recv.rb.expected +1 -0
- data/vendor/spinel/test/multi_write_ivar.rb +34 -0
- data/vendor/spinel/test/multi_write_ivar.rb.expected +3 -0
- data/vendor/spinel/test/multi_write_ivar_const_from_array_rhs.rb +53 -0
- data/vendor/spinel/test/multi_write_ivar_const_from_array_rhs.rb.expected +6 -0
- data/vendor/spinel/test/multi_write_ivar_widening.rb +10 -0
- data/vendor/spinel/test/multi_write_ivar_widening.rb.expected +2 -0
- data/vendor/spinel/test/multi_write_map_block.rb +31 -0
- data/vendor/spinel/test/multi_write_map_block.rb.expected +7 -0
- data/vendor/spinel/test/multi_write_setter.rb +28 -0
- data/vendor/spinel/test/multi_write_setter.rb.expected +3 -0
- data/vendor/spinel/test/multi_write_typed_array_dispatch.rb +44 -0
- data/vendor/spinel/test/multi_write_typed_array_dispatch.rb.expected +3 -0
- data/vendor/spinel/test/nested_class_in_class.rb +38 -0
- data/vendor/spinel/test/nested_class_in_class.rb.expected +3 -0
- data/vendor/spinel/test/nested_class_module_const_resolution.rb +38 -0
- data/vendor/spinel/test/nested_class_module_const_resolution.rb.expected +2 -0
- data/vendor/spinel/test/nil_ivar.rb +44 -0
- data/vendor/spinel/test/nil_ivar.rb.expected +5 -0
- data/vendor/spinel/test/no_attr_write_shortcut_complex.rb +33 -0
- data/vendor/spinel/test/no_attr_write_shortcut_complex.rb.expected +3 -0
- data/vendor/spinel/test/no_attr_write_shortcut_multi.rb +38 -0
- data/vendor/spinel/test/no_attr_write_shortcut_multi.rb.expected +4 -0
- data/vendor/spinel/test/no_keywords_param.rb +15 -0
- data/vendor/spinel/test/no_keywords_param.rb.expected +2 -0
- data/vendor/spinel/test/nullable.rb +26 -0
- data/vendor/spinel/test/nullable.rb.expected +2 -0
- data/vendor/spinel/test/obj_array.rb +26 -0
- data/vendor/spinel/test/obj_array.rb.expected +6 -0
- data/vendor/spinel/test/object_new_sentinel.rb +18 -0
- data/vendor/spinel/test/object_new_sentinel.rb.expected +3 -0
- data/vendor/spinel/test/object_truthy.rb +31 -0
- data/vendor/spinel/test/object_truthy.rb.expected +5 -0
- data/vendor/spinel/test/op_assign_user_operator.rb +36 -0
- data/vendor/spinel/test/open_class.rb +27 -0
- data/vendor/spinel/test/open_class.rb.expected +4 -0
- data/vendor/spinel/test/optional_string_param_method.rb +11 -0
- data/vendor/spinel/test/optional_string_param_method.rb.expected +3 -0
- data/vendor/spinel/test/param_inference_if_predicate.rb +90 -0
- data/vendor/spinel/test/param_inference_if_predicate.rb.expected +3 -0
- data/vendor/spinel/test/param_narrow_from_body_call.rb +34 -0
- data/vendor/spinel/test/param_narrow_from_body_call.rb.expected +2 -0
- data/vendor/spinel/test/param_widens_when_body_assigns_string.rb +21 -0
- data/vendor/spinel/test/param_widens_when_body_assigns_string.rb.expected +6 -0
- data/vendor/spinel/test/pattern.rb +41 -0
- data/vendor/spinel/test/pattern.rb.expected +9 -0
- data/vendor/spinel/test/poly.rb +24 -0
- data/vendor/spinel/test/poly.rb.expected +9 -0
- data/vendor/spinel/test/poly2.rb +34 -0
- data/vendor/spinel/test/poly2.rb.expected +9 -0
- data/vendor/spinel/test/poly_arith.rb +34 -0
- data/vendor/spinel/test/poly_arith.rb.expected +10 -0
- data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb +37 -0
- data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb.expected +9 -0
- data/vendor/spinel/test/poly_array_slot_literal.rb +41 -0
- data/vendor/spinel/test/poly_array_slot_sized_default.rb +33 -0
- data/vendor/spinel/test/poly_box_int_array.rb +13 -0
- data/vendor/spinel/test/poly_box_int_array.rb.expected +2 -0
- data/vendor/spinel/test/poly_dispatch_args_ret.rb +45 -0
- data/vendor/spinel/test/poly_dispatch_args_ret.rb.expected +4 -0
- data/vendor/spinel/test/poly_dispatch_arity_padding.rb +36 -0
- data/vendor/spinel/test/poly_dispatch_arity_truncate.rb +45 -0
- data/vendor/spinel/test/poly_dispatch_attr_reader.rb +44 -0
- data/vendor/spinel/test/poly_dispatch_attr_reader.rb.expected +4 -0
- data/vendor/spinel/test/poly_dispatch_builtin.rb +16 -0
- data/vendor/spinel/test/poly_dispatch_builtin.rb.expected +2 -0
- data/vendor/spinel/test/poly_dispatch_builtin_all.rb +34 -0
- data/vendor/spinel/test/poly_dispatch_builtin_all.rb.expected +8 -0
- data/vendor/spinel/test/poly_dispatch_ptr_array.rb +57 -0
- data/vendor/spinel/test/poly_dispatch_ptr_array.rb.expected +6 -0
- data/vendor/spinel/test/poly_equality_mixed_sites.rb +40 -0
- data/vendor/spinel/test/poly_equality_mixed_sites.rb.expected +10 -0
- data/vendor/spinel/test/poly_gc.rb +39 -0
- data/vendor/spinel/test/poly_gc.rb.expected +3 -0
- data/vendor/spinel/test/poly_hash_literal_from_ivar.rb +47 -0
- data/vendor/spinel/test/poly_hash_literal_from_ivar.rb.expected +5 -0
- data/vendor/spinel/test/poly_hash_with_range.rb +36 -0
- data/vendor/spinel/test/poly_hash_with_range.rb.expected +10 -0
- data/vendor/spinel/test/poly_hash_with_time.rb +32 -0
- data/vendor/spinel/test/poly_hash_with_time.rb.expected +8 -0
- data/vendor/spinel/test/poly_int_arith_auto_unify.rb +26 -0
- data/vendor/spinel/test/poly_int_arith_auto_unify.rb.expected +4 -0
- data/vendor/spinel/test/poly_int_bit_index.rb +50 -0
- data/vendor/spinel/test/poly_int_bit_index.rb.expected +14 -0
- data/vendor/spinel/test/poly_int_bitops_auto_unify.rb +20 -0
- data/vendor/spinel/test/poly_int_bitops_auto_unify.rb.expected +5 -0
- data/vendor/spinel/test/poly_is_a.rb +47 -0
- data/vendor/spinel/test/poly_is_a.rb.expected +10 -0
- data/vendor/spinel/test/poly_keyed_hash_method_dedup.rb +37 -0
- data/vendor/spinel/test/poly_keyed_hash_method_dedup.rb.expected +4 -0
- data/vendor/spinel/test/poly_keyed_hash_pipeline.rb +40 -0
- data/vendor/spinel/test/poly_keyed_hash_pipeline.rb.expected +2 -0
- data/vendor/spinel/test/poly_method_args.rb +23 -0
- data/vendor/spinel/test/poly_method_args.rb.expected +2 -0
- data/vendor/spinel/test/poly_method_mixed_return.rb +23 -0
- data/vendor/spinel/test/poly_method_mixed_return.rb.expected +2 -0
- data/vendor/spinel/test/poly_or_returns_value.rb +13 -0
- data/vendor/spinel/test/poly_or_returns_value.rb.expected +4 -0
- data/vendor/spinel/test/poly_recv_aref_box_arm.rb +41 -0
- data/vendor/spinel/test/poly_recv_aref_box_arm.rb.expected +4 -0
- data/vendor/spinel/test/poly_recv_aref_str_key.rb +42 -0
- data/vendor/spinel/test/poly_recv_aref_str_key.rb.expected +2 -0
- data/vendor/spinel/test/poly_recv_bracket_assign.rb +31 -0
- data/vendor/spinel/test/poly_recv_bracket_assign.rb.expected +1 -0
- data/vendor/spinel/test/poly_recv_each.rb +35 -0
- data/vendor/spinel/test/poly_recv_each.rb.expected +7 -0
- data/vendor/spinel/test/poly_return_value_class.rb +66 -0
- data/vendor/spinel/test/poly_return_value_class.rb.expected +7 -0
- data/vendor/spinel/test/poly_self_deref.rb +28 -0
- data/vendor/spinel/test/poly_self_deref.rb.expected +2 -0
- data/vendor/spinel/test/poly_shl_array_push_dispatch.rb +35 -0
- data/vendor/spinel/test/poly_shl_array_push_dispatch.rb.expected +5 -0
- data/vendor/spinel/test/poly_slice_assign.rb +26 -0
- data/vendor/spinel/test/poly_slice_assign.rb.expected +3 -0
- data/vendor/spinel/test/poly_str_append.rb +40 -0
- data/vendor/spinel/test/poly_str_append.rb.expected +2 -0
- data/vendor/spinel/test/poly_to_i_via_str_poly_hash.rb +19 -0
- data/vendor/spinel/test/poly_to_i_via_str_poly_hash.rb.expected +1 -0
- data/vendor/spinel/test/post_execution.rb +17 -0
- data/vendor/spinel/test/post_execution.rb.expected +4 -0
- data/vendor/spinel/test/pre_execution.rb +18 -0
- data/vendor/spinel/test/pre_execution.rb.expected +4 -0
- data/vendor/spinel/test/primitive_method_shadow.rb +48 -0
- data/vendor/spinel/test/primitive_method_shadow.rb.expected +4 -0
- data/vendor/spinel/test/primitive_method_shadow_int_recv.rb +47 -0
- data/vendor/spinel/test/primitive_method_shadow_int_recv.rb.expected +1 -0
- data/vendor/spinel/test/proc.rb +42 -0
- data/vendor/spinel/test/proc.rb.expected +8 -0
- data/vendor/spinel/test/proc_closure.rb +44 -0
- data/vendor/spinel/test/proc_closure.rb.expected +8 -0
- data/vendor/spinel/test/proc_hash_value.rb +27 -0
- data/vendor/spinel/test/proc_hash_value.rb.expected +1 -0
- data/vendor/spinel/test/ptr_array.rb +107 -0
- data/vendor/spinel/test/ptr_array.rb.expected +23 -0
- data/vendor/spinel/test/range.rb +130 -0
- data/vendor/spinel/test/range.rb.expected +61 -0
- data/vendor/spinel/test/redo.rb +263 -0
- data/vendor/spinel/test/redo.rb.expected +71 -0
- data/vendor/spinel/test/reduce_acc_shadow.rb +31 -0
- data/vendor/spinel/test/reduce_acc_shadow.rb.expected +5 -0
- data/vendor/spinel/test/regex.rb +152 -0
- data/vendor/spinel/test/regex.rb.expected +43 -0
- data/vendor/spinel/test/regexp.rb +34 -0
- data/vendor/spinel/test/regexp.rb.expected +12 -0
- data/vendor/spinel/test/reopen_class.rb +33 -0
- data/vendor/spinel/test/reopen_class.rb.expected +5 -0
- data/vendor/spinel/test/require/lib/greeter.rb +9 -0
- data/vendor/spinel/test/require/main.rb +5 -0
- data/vendor/spinel/test/require_dedup/lib/data.rb +2 -0
- data/vendor/spinel/test/require_dedup/lib/types.rb +1 -0
- data/vendor/spinel/test/require_dedup/main.rb +8 -0
- data/vendor/spinel/test/rescue.rb +48 -0
- data/vendor/spinel/test/rescue.rb.expected +7 -0
- data/vendor/spinel/test/rescue_modifier_assign.rb +24 -0
- data/vendor/spinel/test/rescue_modifier_assign.rb.expected +4 -0
- data/vendor/spinel/test/rightward_assign.rb +36 -0
- data/vendor/spinel/test/rightward_assign.rb.expected +6 -0
- data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb +27 -0
- data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb.expected +3 -0
- data/vendor/spinel/test/sample_user_method.rb +20 -0
- data/vendor/spinel/test/scan_ivars_inherited_slot.rb +32 -0
- data/vendor/spinel/test/scan_new_calls_class_scope.rb +35 -0
- data/vendor/spinel/test/scan_new_calls_class_scope.rb.expected +1 -0
- data/vendor/spinel/test/send.rb +15 -0
- data/vendor/spinel/test/send.rb.expected +2 -0
- data/vendor/spinel/test/shareable_constant.rb +10 -0
- data/vendor/spinel/test/shareable_constant.rb.expected +2 -0
- data/vendor/spinel/test/sized_poly_array_nil_n.rb +37 -0
- data/vendor/spinel/test/sized_poly_array_nil_n.rb.expected +3 -0
- data/vendor/spinel/test/source_file.rb +37 -0
- data/vendor/spinel/test/source_file.rb.expected +8 -0
- data/vendor/spinel/test/splat_call.rb +72 -0
- data/vendor/spinel/test/splat_call.rb.expected +35 -0
- data/vendor/spinel/test/splat_destructure.rb +56 -0
- data/vendor/spinel/test/splat_destructure.rb.expected +36 -0
- data/vendor/spinel/test/splat_destructure_poly.rb +26 -0
- data/vendor/spinel/test/splat_destructure_poly.rb.expected +8 -0
- data/vendor/spinel/test/stdlib.rb +28 -0
- data/vendor/spinel/test/stdlib.rb.expected +5 -0
- data/vendor/spinel/test/stringio.rb +84 -0
- data/vendor/spinel/test/stringio.rb.expected +27 -0
- data/vendor/spinel/test/strip_nullable_int_cast.rb +24 -0
- data/vendor/spinel/test/strip_nullable_int_cast.rb.expected +1 -0
- data/vendor/spinel/test/struct.rb +25 -0
- data/vendor/spinel/test/struct.rb.expected +8 -0
- data/vendor/spinel/test/struct_inherit.rb +28 -0
- data/vendor/spinel/test/struct_inherit.rb.expected +7 -0
- data/vendor/spinel/test/struct_kw.rb +16 -0
- data/vendor/spinel/test/struct_kw.rb.expected +5 -0
- data/vendor/spinel/test/subclass_inherits_module_parent.rb +40 -0
- data/vendor/spinel/test/subclass_inherits_module_parent.rb.expected +3 -0
- data/vendor/spinel/test/super_arg_cross_class_cast.rb +39 -0
- data/vendor/spinel/test/super_arg_cross_class_cast.rb.expected +2 -0
- data/vendor/spinel/test/super_forwarding.rb +25 -0
- data/vendor/spinel/test/super_forwarding.rb.expected +3 -0
- data/vendor/spinel/test/sym_case.rb +15 -0
- data/vendor/spinel/test/sym_case.rb.expected +4 -0
- data/vendor/spinel/test/sym_poly_hash_merge.rb +47 -0
- data/vendor/spinel/test/sym_poly_hash_merge.rb.expected +11 -0
- data/vendor/spinel/test/symbol_ivar_reassign.rb +25 -0
- data/vendor/spinel/test/symbol_ivar_reassign.rb.expected +2 -0
- data/vendor/spinel/test/three_level_array_outer_index.rb +87 -0
- data/vendor/spinel/test/three_level_array_outer_index.rb.expected +17 -0
- data/vendor/spinel/test/toplevel_ivar_array.rb +19 -0
- data/vendor/spinel/test/toplevel_ivar_array.rb.expected +4 -0
- data/vendor/spinel/test/truncate_module_method.rb +46 -0
- data/vendor/spinel/test/truncate_module_method.rb.expected +6 -0
- data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb +20 -0
- data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb.expected +1 -0
- data/vendor/spinel/test/undef.rb +33 -0
- data/vendor/spinel/test/undef.rb.expected +2 -0
- data/vendor/spinel/test/user_method_named_like_mutator.rb +30 -0
- data/vendor/spinel/test/user_method_named_like_mutator.rb.expected +2 -0
- data/vendor/spinel/test/value_type_ctor_gc_save.rb +46 -0
- data/vendor/spinel/test/value_type_ctor_gc_save.rb.expected +3 -0
- data/vendor/spinel/test/widen_int_obj_to_poly.rb +29 -0
- data/vendor/spinel/test/yield.rb +67 -0
- data/vendor/spinel/test/yield.rb.expected +5 -0
- data/vendor/spinel/test/yield_method_call_in_method_body.rb +58 -0
- data/vendor/spinel/test/yield_method_call_in_method_body.rb.expected +4 -0
- metadata +778 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Issue #378: `case <string> when :sym_literal` (and the
|
|
2
|
+
# symmetric `case <symbol> when "string_literal"`) used to lower
|
|
3
|
+
# to `strcmp(str, SPS_<sym>) == 0` / `mrb_int == const char *` —
|
|
4
|
+
# C type errors on every such arm because `compile_expr` on a
|
|
5
|
+
# SymbolNode returns the `sp_sym` numeric id (a long long), and
|
|
6
|
+
# strcmp expects `const char *`.
|
|
7
|
+
#
|
|
8
|
+
# CRuby semantics: `:sym === "string"` is false (Symbol#=== only
|
|
9
|
+
# matches Symbols), and `"string" === :sym` is also false. The
|
|
10
|
+
# fix emits a literal `0` for these cross-type when arms — the
|
|
11
|
+
# C compiles, and the runtime pick correctly falls through to
|
|
12
|
+
# the else clause to match CRuby.
|
|
13
|
+
|
|
14
|
+
def lookup(name)
|
|
15
|
+
case name
|
|
16
|
+
when :id
|
|
17
|
+
1
|
|
18
|
+
when :body
|
|
19
|
+
2
|
|
20
|
+
else
|
|
21
|
+
-1
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# String case-expr against symbol when-arms — every arm misses,
|
|
26
|
+
# else clause runs.
|
|
27
|
+
puts lookup("id") # -1 (not 1)
|
|
28
|
+
puts lookup("body") # -1 (not 2)
|
|
29
|
+
puts lookup("nope") # -1
|
|
30
|
+
|
|
31
|
+
def reverse(sym)
|
|
32
|
+
case sym
|
|
33
|
+
when "id"
|
|
34
|
+
1
|
|
35
|
+
when "body"
|
|
36
|
+
2
|
|
37
|
+
else
|
|
38
|
+
-1
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Symbol case-expr against string when-arms — symmetric: every
|
|
43
|
+
# arm misses, else runs.
|
|
44
|
+
puts reverse(:id) # -1
|
|
45
|
+
puts reverse(:body) # -1
|
|
46
|
+
|
|
47
|
+
# Sanity: matching arms still work.
|
|
48
|
+
def lookup_sym(s)
|
|
49
|
+
case s
|
|
50
|
+
when :id
|
|
51
|
+
1
|
|
52
|
+
when :body
|
|
53
|
+
2
|
|
54
|
+
else
|
|
55
|
+
-1
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
puts lookup_sym(:id) # 1
|
|
59
|
+
puts lookup_sym(:body) # 2
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Issue #67: `case obj when SomeClass` lowered the predicate to an
|
|
2
|
+
# `mrb_int` and then compared it against the bare class identifier
|
|
3
|
+
# (`Var`, `List`), which weren't declared in C. Two pieces:
|
|
4
|
+
#
|
|
5
|
+
# - The case-temp now keeps the predicate's pointer type
|
|
6
|
+
# (`sp_<Cls> *`) so the value is comparable as-is.
|
|
7
|
+
# - `compile_when_conds` resolves `when ClassName` against an
|
|
8
|
+
# obj-typed predicate at compile time using
|
|
9
|
+
# `is_class_or_ancestor` — same-class or ancestor matches; an
|
|
10
|
+
# unrelated when-class folds to a literal `0`. Nullable predicate
|
|
11
|
+
# types (`obj_<Cls>?`) match only when the value is non-NULL.
|
|
12
|
+
#
|
|
13
|
+
# Subclass matching against a parent-typed predicate (where the
|
|
14
|
+
# instance is actually a child class) needs a runtime cls_id check
|
|
15
|
+
# and stays out of scope here.
|
|
16
|
+
|
|
17
|
+
class Var; end
|
|
18
|
+
class List; end
|
|
19
|
+
|
|
20
|
+
# Statement form — the issue's exact reproducer.
|
|
21
|
+
node = Var.new
|
|
22
|
+
case node
|
|
23
|
+
when Var
|
|
24
|
+
puts "var"
|
|
25
|
+
when List
|
|
26
|
+
puts "list"
|
|
27
|
+
end
|
|
28
|
+
# => var
|
|
29
|
+
|
|
30
|
+
# Statement form, the other arm wins.
|
|
31
|
+
items = List.new
|
|
32
|
+
case items
|
|
33
|
+
when Var
|
|
34
|
+
puts "var2"
|
|
35
|
+
when List
|
|
36
|
+
puts "list2"
|
|
37
|
+
end
|
|
38
|
+
# => list2
|
|
39
|
+
|
|
40
|
+
# Expression form — same dispatch, value-returning.
|
|
41
|
+
n = Var.new
|
|
42
|
+
label = case n
|
|
43
|
+
when Var then "v"
|
|
44
|
+
when List then "l"
|
|
45
|
+
else "?"
|
|
46
|
+
end
|
|
47
|
+
puts label
|
|
48
|
+
# => v
|
|
49
|
+
|
|
50
|
+
# Else clause when no when arm matches.
|
|
51
|
+
class Other; end
|
|
52
|
+
class Sentinel; end
|
|
53
|
+
o = Other.new
|
|
54
|
+
case o
|
|
55
|
+
when Var then puts "x"
|
|
56
|
+
when List then puts "y"
|
|
57
|
+
when Sentinel then puts "z"
|
|
58
|
+
else puts "default"
|
|
59
|
+
end
|
|
60
|
+
# => default
|
|
61
|
+
|
|
62
|
+
# Inheritance: when arm names an ancestor of the predicate's class.
|
|
63
|
+
class Animal; end
|
|
64
|
+
class Dog < Animal; end
|
|
65
|
+
d = Dog.new
|
|
66
|
+
case d
|
|
67
|
+
when Animal then puts "ancestor"
|
|
68
|
+
else puts "else"
|
|
69
|
+
end
|
|
70
|
+
# => ancestor
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# `@a = obj.attr = val` and similar chains used to mistype the
|
|
2
|
+
# outer LHS. `infer_call_type` had no special case for an
|
|
3
|
+
# attr-writer CallNode (`obj.attr = val`), so it fell through to
|
|
4
|
+
# the int default. Codegen was emitting the right C-level
|
|
5
|
+
# assignment expression `(rc->iv_attr = arg)` (which evaluates
|
|
6
|
+
# to the rhs in C), but the surrounding LHS was declared as
|
|
7
|
+
# `mrb_int`, so `outer = (rc->iv_attr = obj_value)` typed the
|
|
8
|
+
# outer slot as int and any later use went through the wrong
|
|
9
|
+
# dispatch.
|
|
10
|
+
#
|
|
11
|
+
# Fix: when `infer_call_type` sees a CallNode whose name ends
|
|
12
|
+
# with `=` (and isn't `==` / `<=` / etc.), and the receiver is
|
|
13
|
+
# obj-typed and has an attr_writer for the slot, return the rhs
|
|
14
|
+
# argument's type. Ruby semantics: an assignment expression
|
|
15
|
+
# evaluates to the rhs.
|
|
16
|
+
|
|
17
|
+
class Box
|
|
18
|
+
def initialize(n); @n = n; @arr = []; @arr << n; end
|
|
19
|
+
attr_reader :n
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Holder
|
|
23
|
+
attr_writer :box
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Simple chain — the result of `h.box = Box.new(...)` should be
|
|
27
|
+
# a Box, not an int.
|
|
28
|
+
h = Holder.new
|
|
29
|
+
b = (h.box = Box.new(42))
|
|
30
|
+
puts b.n # 42
|
|
31
|
+
|
|
32
|
+
# Optcarrot-shape chain: `@a = obj.x = expr`. Both `@a` and
|
|
33
|
+
# `obj.x` get the same Box; reading either back gives the
|
|
34
|
+
# same value.
|
|
35
|
+
class Apu
|
|
36
|
+
def initialize(n); @n = n; @arr = []; @arr << n; end
|
|
37
|
+
attr_reader :n
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class Cpu
|
|
41
|
+
attr_writer :apu
|
|
42
|
+
attr_reader :apu
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class Nes
|
|
46
|
+
def initialize
|
|
47
|
+
@cpu = Cpu.new
|
|
48
|
+
@apu = @cpu.apu = Apu.new(99)
|
|
49
|
+
end
|
|
50
|
+
attr_reader :apu, :cpu
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
n = Nes.new
|
|
54
|
+
puts n.apu.n # 99
|
|
55
|
+
puts n.cpu.apu.n # 99
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# `@b = @a &= 0x80` parses as InstanceVariableWriteNode whose value
|
|
2
|
+
# is an InstanceVariableOperatorWriteNode. Without an inner-write
|
|
3
|
+
# emitter, the `@a &= ...` evaporated and `@b = ...` saw `0` —
|
|
4
|
+
# both ivars ended up wrong. Verifies the chained form against the
|
|
5
|
+
# parens-rewrite (`@b = (@a = @a & 0x80)`) and the manual two-stmt
|
|
6
|
+
# split — all three should produce the same `@a=128 @b=128`.
|
|
7
|
+
|
|
8
|
+
class C
|
|
9
|
+
attr_reader :a, :b
|
|
10
|
+
def initialize
|
|
11
|
+
@a = 0xff
|
|
12
|
+
@b = 0
|
|
13
|
+
end
|
|
14
|
+
def m_chain
|
|
15
|
+
@b = @a &= 0x80
|
|
16
|
+
end
|
|
17
|
+
def m_paren
|
|
18
|
+
@b = (@a = @a & 0x80)
|
|
19
|
+
end
|
|
20
|
+
def m_split
|
|
21
|
+
@a = @a & 0x80
|
|
22
|
+
@b = @a
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
c1 = C.new; c1.m_chain; puts "chain: a=#{c1.a} b=#{c1.b}"
|
|
27
|
+
c2 = C.new; c2.m_paren; puts "paren: a=#{c2.a} b=#{c2.b}"
|
|
28
|
+
c3 = C.new; c3.m_split; puts "split: a=#{c3.a} b=#{c3.b}"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Chained `@a = @b = foo` where the rhs is a method call with a side
|
|
2
|
+
# effect. The naive per-slot lowering re-evaluates the rhs once per
|
|
3
|
+
# target, calling foo() N times instead of once. The chain handler
|
|
4
|
+
# must evaluate the rhs once into a temp and store from the temp into
|
|
5
|
+
# each ivar slot.
|
|
6
|
+
|
|
7
|
+
$count = 0
|
|
8
|
+
|
|
9
|
+
def foo
|
|
10
|
+
$count = $count + 1
|
|
11
|
+
$count
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class C
|
|
15
|
+
def initialize
|
|
16
|
+
@a = "hello"
|
|
17
|
+
@b = 42
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def reset
|
|
21
|
+
@a = @b = foo
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
attr_reader :a, :b
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
c = C.new
|
|
28
|
+
c.reset
|
|
29
|
+
puts $count
|
|
30
|
+
puts c.b
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Chained `@a = @b = ... = literal` where the targets have different
|
|
2
|
+
# concrete slot types (here: a string ivar and an int ivar). Without
|
|
3
|
+
# splitting the chain into per-target writes, the outer assignment's
|
|
4
|
+
# RHS picks up the inner ivar's recorded type, and the C compiler
|
|
5
|
+
# rejects the cross-typed slot store.
|
|
6
|
+
|
|
7
|
+
class C
|
|
8
|
+
def initialize
|
|
9
|
+
@a = "hello"
|
|
10
|
+
@b = 42
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def reset
|
|
14
|
+
@a = @b = nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def show
|
|
18
|
+
puts @a
|
|
19
|
+
puts @b
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
c = C.new
|
|
24
|
+
c.show
|
|
25
|
+
c.reset
|
|
26
|
+
puts "reset ok"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Issue #238 follow-up to #235: chained `@a = @b = nil` in a parent
|
|
2
|
+
# class, with concrete writes in a subclass that pin the slots to
|
|
3
|
+
# typed pointers (string + int). Without restricting the
|
|
4
|
+
# chain-head bypass to `at == "int"`, the parent's nil-chain forces
|
|
5
|
+
# "nil" into the slot type each iteration of the inference fixpoint
|
|
6
|
+
# while the subclass's typed write cascades back up — the slot
|
|
7
|
+
# ping-pongs between obj_X and obj_X? and lands on poly, which
|
|
8
|
+
# then rejects the typed-pointer store as a C type error.
|
|
9
|
+
|
|
10
|
+
class Base
|
|
11
|
+
def reset
|
|
12
|
+
@a = @b = nil
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Sub < Base
|
|
17
|
+
def initialize
|
|
18
|
+
@a = "hello"
|
|
19
|
+
@b = 42
|
|
20
|
+
end
|
|
21
|
+
attr_reader :a, :b
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
s = Sub.new
|
|
25
|
+
puts s.a
|
|
26
|
+
puts s.b
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 4-level chained `||=` mirroring optcarrot's PPU#setup_lut
|
|
2
|
+
# `@lut_update` shape:
|
|
3
|
+
#
|
|
4
|
+
# (((@h[b] ||= [])[i] ||= [nil, nil])[0] ||= []) << v
|
|
5
|
+
#
|
|
6
|
+
# Levels 1, 2, 3 are all `||=` against poly-element receivers
|
|
7
|
+
# (poly_poly_hash, then a poly value carrying a poly_array twice).
|
|
8
|
+
# Pre-fix only level 1 was lowered; levels 2 and 3 fell through to
|
|
9
|
+
# the int default and the chain collapsed to `0 << ...`. The fix
|
|
10
|
+
# threads sp_RbVal temps through every level and promotes ArrayNode
|
|
11
|
+
# rhs literals (`[]`, `[nil, nil]`) to poly_array so each
|
|
12
|
+
# intermediate `cls_id == SP_BUILTIN_POLY_ARRAY` probe matches at
|
|
13
|
+
# runtime.
|
|
14
|
+
|
|
15
|
+
class C
|
|
16
|
+
def initialize
|
|
17
|
+
@h = {}
|
|
18
|
+
end
|
|
19
|
+
def push(b, i, v)
|
|
20
|
+
(((@h[b] ||= [])[i] ||= [nil, nil])[0] ||= []) << v
|
|
21
|
+
end
|
|
22
|
+
def count(b, i); @h[b][i][0].length; end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
c = C.new
|
|
26
|
+
c.push(0, 5, 10)
|
|
27
|
+
c.push(0, 5, 20)
|
|
28
|
+
c.push(0, 7, 30)
|
|
29
|
+
c.push(1, 0, 100)
|
|
30
|
+
puts c.count(0, 5) # 2
|
|
31
|
+
puts c.count(0, 7) # 1
|
|
32
|
+
puts c.count(1, 0) # 1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# `(@h[k] ||= []) << v` — chained `||=` over a Hash element with a
|
|
2
|
+
# trailing method call. The parenthesised subexpression evaluates
|
|
3
|
+
# to the (just-created or pre-existing) Array; `<<` then pushes
|
|
4
|
+
# into it.
|
|
5
|
+
#
|
|
6
|
+
# Pre-fix the IndexOrWriteNode expression-form fell through to the
|
|
7
|
+
# default catch-all and emitted literal `0` as the chain
|
|
8
|
+
# receiver — the resulting `sp_poly_shl(0, …)` failed C compile
|
|
9
|
+
# (`0` is `int`, sp_poly_shl wants `sp_RbVal`). Spinel now lowers
|
|
10
|
+
# `(h[k] ||= v)` into a get-then-set temp that the chain reads.
|
|
11
|
+
|
|
12
|
+
class C
|
|
13
|
+
def initialize
|
|
14
|
+
@h = {} # promotes to sym_poly_hash on first []=
|
|
15
|
+
end
|
|
16
|
+
def add(k, v)
|
|
17
|
+
(@h[k] ||= []) << v
|
|
18
|
+
end
|
|
19
|
+
def count(k); @h[k].length; end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
c = C.new
|
|
23
|
+
c.add(:a, 1)
|
|
24
|
+
c.add(:a, 2)
|
|
25
|
+
c.add(:b, 10)
|
|
26
|
+
c.add(:b, 20)
|
|
27
|
+
c.add(:b, 30)
|
|
28
|
+
puts c.count(:a) # 2
|
|
29
|
+
puts c.count(:b) # 3
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# `(arr[idx] ||= []) << v` — chained `||=` over a poly_array
|
|
2
|
+
# element. Pre-fix the IndexOrWriteNode expression-form returned
|
|
3
|
+
# the int default for non-hash receivers, so the chain receiver
|
|
4
|
+
# collapsed to literal `0` and `<<` failed C compile.
|
|
5
|
+
# Spinel now lowers the get-then-set into an sp_RbVal temp that
|
|
6
|
+
# the chain reads — same shape as the *_poly_hash arms but with
|
|
7
|
+
# in-bounds + auto-grow handling for the indexed access.
|
|
8
|
+
|
|
9
|
+
class C
|
|
10
|
+
def initialize
|
|
11
|
+
@a = Array.new(3) { [] } # promotes to poly_array of empty poly_arrays
|
|
12
|
+
end
|
|
13
|
+
def push(idx, v)
|
|
14
|
+
(@a[idx] ||= []) << v
|
|
15
|
+
end
|
|
16
|
+
def count(i); @a[i].length; end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
c = C.new
|
|
20
|
+
c.push(0, 10)
|
|
21
|
+
c.push(0, 20)
|
|
22
|
+
c.push(1, 100)
|
|
23
|
+
puts c.count(0) # 2
|
|
24
|
+
puts c.count(1) # 1
|
|
25
|
+
puts c.count(2) # 0
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Same chained-`||=` lowering, but for `str_poly_hash` instead of
|
|
2
|
+
# `sym_poly_hash`. Exercises the `const char *` key path (vs the
|
|
3
|
+
# `sp_sym` integer key path) of the typed-poly-hash branch added
|
|
4
|
+
# alongside the sym_poly_hash arm.
|
|
5
|
+
|
|
6
|
+
class C
|
|
7
|
+
def initialize
|
|
8
|
+
@h = {}
|
|
9
|
+
@h["init"] = [] # forces str_poly_hash
|
|
10
|
+
end
|
|
11
|
+
def add(k, v)
|
|
12
|
+
(@h[k] ||= []) << v
|
|
13
|
+
end
|
|
14
|
+
def count(k); @h[k].length; end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
c = C.new
|
|
18
|
+
c.add("init", 7) # appends to existing
|
|
19
|
+
c.add("foo", 1)
|
|
20
|
+
c.add("foo", 2)
|
|
21
|
+
c.add("bar", 100)
|
|
22
|
+
puts c.count("init") # 1
|
|
23
|
+
puts c.count("foo") # 2
|
|
24
|
+
puts c.count("bar") # 1
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Issue #52: reading a class-scoped constant from outside the class
|
|
2
|
+
# via `ClassName::CONST` used to emit `User_MAX_NAME_LENGTH` as an
|
|
3
|
+
# undeclared C identifier. Now it's emitted as `cst_User_MAX_NAME_LENGTH`
|
|
4
|
+
# with a matching declaration.
|
|
5
|
+
|
|
6
|
+
class User
|
|
7
|
+
MAX_NAME_LENGTH = 20
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
puts User::MAX_NAME_LENGTH # 20
|
|
11
|
+
|
|
12
|
+
# Mixed reads: class const, module const, top-level const all
|
|
13
|
+
# accessible via the same path forms.
|
|
14
|
+
TOP = 1
|
|
15
|
+
|
|
16
|
+
module Site
|
|
17
|
+
ROOT = 2
|
|
18
|
+
|
|
19
|
+
class Page
|
|
20
|
+
LIMIT = 3
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
puts TOP # 1
|
|
25
|
+
puts Site::ROOT # 2
|
|
26
|
+
puts Site::Page::LIMIT # 3
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class Parser
|
|
2
|
+
SOFT_IDENTIFIER_KEYWORDS = %i[with]
|
|
3
|
+
SHADOWED = %i[class]
|
|
4
|
+
|
|
5
|
+
def soft?(value)
|
|
6
|
+
SOFT_IDENTIFIER_KEYWORDS.include?(value)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def shadowed?(value)
|
|
10
|
+
SHADOWED.include?(value)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
SHADOWED = %i[top]
|
|
15
|
+
|
|
16
|
+
puts Parser.new.soft?(:with) # true
|
|
17
|
+
puts Parser.new.soft?(:without) # false
|
|
18
|
+
puts Parser.new.shadowed?(:class) # true
|
|
19
|
+
puts Parser.new.shadowed?(:top) # false
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Issue #14: classes referenced before their definition must still
|
|
2
|
+
# produce a working struct layout. Earlier classes that embed a
|
|
3
|
+
# value-type instance of a later class need the later class's struct
|
|
4
|
+
# to be emitted first.
|
|
5
|
+
|
|
6
|
+
class Box
|
|
7
|
+
def initialize
|
|
8
|
+
@ticket = Ticket.new(7)
|
|
9
|
+
end
|
|
10
|
+
def num; @ticket.num; end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Ticket
|
|
14
|
+
def initialize(num)
|
|
15
|
+
@num = num
|
|
16
|
+
end
|
|
17
|
+
def num; @num; end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
puts Box.new.num # 7
|
|
21
|
+
|
|
22
|
+
# Multi-level chain: Outer -> Middle -> Leaf, all defined back-to-front.
|
|
23
|
+
class Outer
|
|
24
|
+
def initialize
|
|
25
|
+
@mid = Middle.new
|
|
26
|
+
@leaf = Leaf.new(11)
|
|
27
|
+
end
|
|
28
|
+
def show
|
|
29
|
+
puts @mid.value
|
|
30
|
+
puts @leaf.value
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class Middle
|
|
35
|
+
def initialize
|
|
36
|
+
@leaf = Leaf.new(3)
|
|
37
|
+
end
|
|
38
|
+
def value; @leaf.value; end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class Leaf
|
|
42
|
+
def initialize(v); @v = v; end
|
|
43
|
+
def value; @v; end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
Outer.new.show # 3 / 11
|
|
47
|
+
|
|
48
|
+
# Parent class has a value-type ivar of a class defined later: child
|
|
49
|
+
# inherits the (flattened) field, so the dep walk must follow the
|
|
50
|
+
# parent chain too.
|
|
51
|
+
class Holder
|
|
52
|
+
def initialize
|
|
53
|
+
@item = Item.new(42)
|
|
54
|
+
end
|
|
55
|
+
def value; @item.value; end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class SubHolder < Holder
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class Item
|
|
62
|
+
def initialize(v); @v = v; end
|
|
63
|
+
def value; @v; end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
puts SubHolder.new.value # 42
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `infer_call_type`'s class-body fallback used to short-circuit on
|
|
2
|
+
# any call inside a class body — including those with a receiver.
|
|
3
|
+
# A `recv.method(...)` whose method isn't on the enclosing class
|
|
4
|
+
# resolved as the default `int`, and the receiver-aware branches
|
|
5
|
+
# below (Fiber.yield → poly, infer_open_class_type → user open-
|
|
6
|
+
# class return) never ran. The fix gates the fallback on
|
|
7
|
+
# `recv < 0`.
|
|
8
|
+
#
|
|
9
|
+
# Reproducer here: an open-class method on Integer that returns a
|
|
10
|
+
# hash. Without the fix, `C#wrap`'s body calls `x.to_pair` whose
|
|
11
|
+
# inferred return came out as `int` (the enclosing C class has no
|
|
12
|
+
# `to_pair`), but the actual emit returns `sp_SymIntHash *` →
|
|
13
|
+
# "returning sp_SymIntHash * from a function with return type
|
|
14
|
+
# mrb_int" -Wint-conversion error.
|
|
15
|
+
|
|
16
|
+
class Integer
|
|
17
|
+
def to_pair
|
|
18
|
+
{a: self, b: self * 2, c: self * 3}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class C
|
|
23
|
+
def wrap(x)
|
|
24
|
+
x.to_pair
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
h = C.new.wrap(5)
|
|
29
|
+
puts h[:a] # 5
|
|
30
|
+
puts h[:b] # 10
|
|
31
|
+
puts h[:c] # 15
|