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,38 @@
|
|
|
1
|
+
# `obj.x = v` must dispatch to `def x=(v)` when x= is not a registered
|
|
2
|
+
# attr_writer. A multi-statement body never matched the auto-attr_writer
|
|
3
|
+
# pattern (which requires a single `InstanceVariableWriteNode` body), so
|
|
4
|
+
# the fix at the call site is sufficient on its own to make this case
|
|
5
|
+
# work — no auto-classification change required.
|
|
6
|
+
|
|
7
|
+
class C
|
|
8
|
+
attr_accessor :real
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@real = 0
|
|
12
|
+
@logged = ""
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Multi-statement writer. Side-effects on a *different* ivar so we can
|
|
16
|
+
# tell whether the def actually ran.
|
|
17
|
+
def logged=(v)
|
|
18
|
+
@logged = "set:" + v
|
|
19
|
+
@real = v.length
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def get_logged
|
|
23
|
+
@logged
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
c = C.new
|
|
28
|
+
|
|
29
|
+
# attr_accessor path: still short-circuits to field write.
|
|
30
|
+
c.real = 7
|
|
31
|
+
puts c.real # 7
|
|
32
|
+
|
|
33
|
+
# Multi-statement def x=: must dispatch (not bypass).
|
|
34
|
+
c.logged = "hello"
|
|
35
|
+
puts c.get_logged # set:hello
|
|
36
|
+
puts c.real # 5 (overwritten by the side effect)
|
|
37
|
+
|
|
38
|
+
puts "done"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# NoKeywordsParameterNode — `def f(**nil)` explicit kwarg rejection.
|
|
2
|
+
#
|
|
3
|
+
# In CRuby this declares the method rejects keyword arguments;
|
|
4
|
+
# attempting `f(k: 1)` raises ArgumentError. Spinel's keyword-arg
|
|
5
|
+
# handling is already conservative (only known keys accepted), so
|
|
6
|
+
# the explicit `**nil` marker is effectively a no-op at the codegen
|
|
7
|
+
# level. The parser must still recognize the node so Phase 0's
|
|
8
|
+
# UnsupportedNode loud-error doesn't fire.
|
|
9
|
+
|
|
10
|
+
def add(a, b, **nil)
|
|
11
|
+
a + b
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
puts add(1, 2) # 3
|
|
15
|
+
puts add(10, 20) # 30
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Test nullable types (T|nil without full poly overhead)
|
|
2
|
+
def find_name(arr, target)
|
|
3
|
+
result = nil
|
|
4
|
+
i = 0
|
|
5
|
+
while i < arr.length
|
|
6
|
+
if arr[i] == target
|
|
7
|
+
result = "found:" + target.to_s
|
|
8
|
+
end
|
|
9
|
+
i = i + 1
|
|
10
|
+
end
|
|
11
|
+
result
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
r = find_name([10, 20, 30], 20)
|
|
15
|
+
if r.nil?
|
|
16
|
+
puts "not found"
|
|
17
|
+
else
|
|
18
|
+
puts r
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
r2 = find_name([10, 20, 30], 99)
|
|
22
|
+
if r2.nil?
|
|
23
|
+
puts "not found"
|
|
24
|
+
else
|
|
25
|
+
puts r2
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class Point
|
|
2
|
+
attr_accessor :x
|
|
3
|
+
attr_accessor :y
|
|
4
|
+
def initialize(x, y)
|
|
5
|
+
@tag = "p"
|
|
6
|
+
@x = x
|
|
7
|
+
@y = y
|
|
8
|
+
end
|
|
9
|
+
def to_s
|
|
10
|
+
x.to_s + "," + y.to_s
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
points = [Point.new(1, 2), Point.new(3, 4), Point.new(5, 6)]
|
|
15
|
+
points.each { |p|
|
|
16
|
+
puts p.to_s
|
|
17
|
+
}
|
|
18
|
+
puts points.length
|
|
19
|
+
|
|
20
|
+
# push to obj array
|
|
21
|
+
more = []
|
|
22
|
+
more.push(Point.new(10, 20))
|
|
23
|
+
more.push(Point.new(30, 40))
|
|
24
|
+
more.each { |p|
|
|
25
|
+
puts p.x + p.y
|
|
26
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Issue #63: `Object.new.freeze` constants used as identity sentinels
|
|
2
|
+
# generated `sp_Object *` declarations against a type that didn't exist
|
|
3
|
+
# in the runtime, plus the `freeze` call fell through the dispatcher
|
|
4
|
+
# and the constant was assigned `0` (NULL) instead of the new object.
|
|
5
|
+
# After the fix:
|
|
6
|
+
# - lib/sp_runtime.h defines sp_Object and sp_Object_new (a fresh
|
|
7
|
+
# GC-managed allocation per call so `==` is identity)
|
|
8
|
+
# - codegen emits sp_Object_new() for `Object.new`
|
|
9
|
+
# - the receiver-passthrough `freeze` arm in compile_object_method_expr
|
|
10
|
+
# keeps the chain alive so the constant gets the actual pointer.
|
|
11
|
+
|
|
12
|
+
NO_DIRECT_CALL = Object.new.freeze
|
|
13
|
+
HASH_MISS = Object.new.freeze
|
|
14
|
+
|
|
15
|
+
# Distinct sentinels: their addresses differ.
|
|
16
|
+
puts NO_DIRECT_CALL == HASH_MISS # false
|
|
17
|
+
puts NO_DIRECT_CALL == NO_DIRECT_CALL # true
|
|
18
|
+
puts HASH_MISS == HASH_MISS # true
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Regression test for issue #20: a value-typed object used directly
|
|
2
|
+
# as a condition must be treated as truthy. C cannot use a struct as
|
|
3
|
+
# a scalar in `if (...)`, so the codegen wraps value-type objects
|
|
4
|
+
# with `((expr), 1)` to evaluate side effects then yield 1.
|
|
5
|
+
|
|
6
|
+
class Value
|
|
7
|
+
def initialize(x)
|
|
8
|
+
@x = x
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Direct constructor in postfix-if predicate
|
|
13
|
+
puts "1 ok" if Value.new(0)
|
|
14
|
+
|
|
15
|
+
# Value-typed local in if-statement
|
|
16
|
+
v = Value.new(1)
|
|
17
|
+
puts "2 ok" if v
|
|
18
|
+
|
|
19
|
+
# Inside a loop
|
|
20
|
+
i = 0
|
|
21
|
+
while i < 1
|
|
22
|
+
puts "3 ok" if Value.new(0)
|
|
23
|
+
i += 1
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Ternary if-expression
|
|
27
|
+
puts (Value.new(2) ? "4 yes" : "4 no")
|
|
28
|
+
|
|
29
|
+
# unless: value-type is always truthy, so the body must be skipped
|
|
30
|
+
puts "5 not run" unless Value.new(3)
|
|
31
|
+
puts "5 done"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# `slot OP= rhs` desugars to `slot = slot OP rhs`. When the slot
|
|
2
|
+
# is obj-typed and the class defines OP as a user method, codegen
|
|
3
|
+
# must dispatch through that method. The previous version emitted
|
|
4
|
+
# raw C `slot OP= rhs` for every slot type — on an obj pointer
|
|
5
|
+
# that compiled to pointer arithmetic, silently miscompiling the
|
|
6
|
+
# Ruby semantics.
|
|
7
|
+
|
|
8
|
+
class Box
|
|
9
|
+
def initialize(n)
|
|
10
|
+
@n = n
|
|
11
|
+
@arr = []
|
|
12
|
+
@arr << n # force heap layout (sp_Box *), not value-type
|
|
13
|
+
end
|
|
14
|
+
attr_reader :n
|
|
15
|
+
|
|
16
|
+
def +(other); Box.new(@n + other); end
|
|
17
|
+
def -(other); Box.new(@n - other); end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Instance-variable op-assign in stmt position.
|
|
21
|
+
class IvarStmt
|
|
22
|
+
def initialize
|
|
23
|
+
@b = Box.new(10)
|
|
24
|
+
@b += 5
|
|
25
|
+
end
|
|
26
|
+
attr_reader :b
|
|
27
|
+
end
|
|
28
|
+
puts IvarStmt.new.b.n # 15
|
|
29
|
+
|
|
30
|
+
# Local-variable op-assign in stmt position.
|
|
31
|
+
def local_stmt
|
|
32
|
+
b = Box.new(20)
|
|
33
|
+
b -= 3
|
|
34
|
+
b.n
|
|
35
|
+
end
|
|
36
|
+
puts local_stmt # 17
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Test: open class support for built-in types
|
|
2
|
+
# Extension methods on String, Integer, Float
|
|
3
|
+
|
|
4
|
+
class String
|
|
5
|
+
def shout
|
|
6
|
+
upcase + "!"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def whisper
|
|
10
|
+
downcase + "..."
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Integer
|
|
15
|
+
def double
|
|
16
|
+
self * 2
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def square
|
|
20
|
+
self * self
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
puts "hello".shout
|
|
25
|
+
puts "HELLO WORLD".whisper
|
|
26
|
+
puts 5.double
|
|
27
|
+
puts 7.square
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Issue #314 (A): `infer_cls_meth_param_from_body`'s walker missed
|
|
2
|
+
# IfNode predicates and else-branches when collecting param method
|
|
3
|
+
# usages, leaving the param at the "int" default and routing
|
|
4
|
+
# `<param>.method(...)` accesses through the int-class fallback —
|
|
5
|
+
# which silently picks the first user class that defines the
|
|
6
|
+
# method and casts the int to that class's struct pointer.
|
|
7
|
+
#
|
|
8
|
+
# Body shape:
|
|
9
|
+
# def update(p)
|
|
10
|
+
# if p.title.nil? # predicate uses p — was invisible
|
|
11
|
+
# nil
|
|
12
|
+
# else
|
|
13
|
+
# self.title = p.title # else-branch uses p — was invisible
|
|
14
|
+
# end
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# `collect_param_methods` walked @nd_body but not @nd_predicate /
|
|
18
|
+
# @nd_subsequent / @nd_else_clause. With ONLY `p.title` inside an
|
|
19
|
+
# `if/else`, called == [] and the param-from-body inference skipped
|
|
20
|
+
# the method entirely.
|
|
21
|
+
#
|
|
22
|
+
# Fix: extend the walk to predicate, subsequent, else_clause,
|
|
23
|
+
# collection (for-in), block, elements, parts, conditions
|
|
24
|
+
# (case/when). Now `called=["title"]` is collected and
|
|
25
|
+
# `class_has_all_methods` picks a class that defines `title`.
|
|
26
|
+
#
|
|
27
|
+
# Surfaced via Roundhouse's emitted real-blog where `Article#update
|
|
28
|
+
# (p)`'s body has exactly this shape and the resulting `mrb_int lv_p`
|
|
29
|
+
# routed `p.title` and `p.body` to two different user classes
|
|
30
|
+
# (ArticleRow for one, ActionResponse for the other) — same `lv_p`
|
|
31
|
+
# cast to two different struct pointers, structurally invalid C.
|
|
32
|
+
|
|
33
|
+
class P
|
|
34
|
+
def title
|
|
35
|
+
@title
|
|
36
|
+
end
|
|
37
|
+
def title=(v)
|
|
38
|
+
@title = v
|
|
39
|
+
end
|
|
40
|
+
def body
|
|
41
|
+
@body
|
|
42
|
+
end
|
|
43
|
+
def body=(v)
|
|
44
|
+
@body = v
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class App
|
|
49
|
+
# `p` is used ONLY inside the if-predicate (`p.title.nil?`),
|
|
50
|
+
# nowhere in the IfNode's body or else-branch. Pre-fix the
|
|
51
|
+
# collect_param_methods walker missed @nd_predicate /
|
|
52
|
+
# @nd_subsequent / @nd_else_clause, so called == [] and the
|
|
53
|
+
# param-from-body inference left `p` at "int". The
|
|
54
|
+
# int-class fallback then routed `p.title` through
|
|
55
|
+
# `((sp_<first-class-with-title> *)lv_p)->iv_title` — picking
|
|
56
|
+
# whichever user class happened to be declared first that has
|
|
57
|
+
# a `title` method. In Roundhouse that's a wildly different
|
|
58
|
+
# struct than the actual `ArticleParams` the call site passes.
|
|
59
|
+
def status(p)
|
|
60
|
+
if p.title.nil?
|
|
61
|
+
"no-title"
|
|
62
|
+
else
|
|
63
|
+
"has-title"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# IMPORTANT: don't call `App#status` directly — the call-site
|
|
69
|
+
# widening pass would pin `p` to obj_P and mask the body-walker
|
|
70
|
+
# bug. The test verifies that body-walker-derived inference fires
|
|
71
|
+
# even without a call site, by ensuring the C compiles cleanly
|
|
72
|
+
# despite multiple user classes (P, Other) that define `title`.
|
|
73
|
+
|
|
74
|
+
class Other
|
|
75
|
+
def title; "wrong"; end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Pin both classes' instances at the top level so they appear in
|
|
79
|
+
# the symbol table.
|
|
80
|
+
o = Other.new
|
|
81
|
+
puts o.title # wrong
|
|
82
|
+
|
|
83
|
+
q = P.new
|
|
84
|
+
q.title = "hello"
|
|
85
|
+
puts q.title # hello
|
|
86
|
+
|
|
87
|
+
# `App#status` is defined but never called — purely body-walker
|
|
88
|
+
# determines `p`'s type. Pre-fix: left at "int", emitted broken C
|
|
89
|
+
# routing through whichever class came first.
|
|
90
|
+
puts "compiled-cleanly"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Stage 1 of body-side type narrowing (B' direction): if a method's
|
|
2
|
+
# parameter is referenced in the body via `param.<m>` where `<m>` is
|
|
3
|
+
# defined on exactly one user class (and isn't a common operator /
|
|
4
|
+
# built-in-overlap method like `length`/`each`/`+`/...), the param's
|
|
5
|
+
# default `int` type narrows to `obj_<C>`.
|
|
6
|
+
#
|
|
7
|
+
# Without this narrowing the param stayed at `int` until a call-site
|
|
8
|
+
# arg-type widened it. For methods that are only ever called via a
|
|
9
|
+
# poly receiver (e.g. through `obj.method(:m)` or a heterogeneous
|
|
10
|
+
# poly_array dispatch), no concrete call site exists — caller-side
|
|
11
|
+
# widening can't fire — and the body would emit raw int operations
|
|
12
|
+
# against the param's expected user-class type.
|
|
13
|
+
|
|
14
|
+
class CPU
|
|
15
|
+
def peek_a(addr); addr * 2 + 1; end
|
|
16
|
+
def cycles_advance(n); n + 100; end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Two separate methods that each take a CPU param. Neither has a
|
|
20
|
+
# direct call-site arg whose type spinel statically knows to be CPU
|
|
21
|
+
# at the time scan_new_calls runs (caller-side widening), so the
|
|
22
|
+
# narrow has to come from the body's method-call shapes.
|
|
23
|
+
|
|
24
|
+
def fetch(cpu, addr)
|
|
25
|
+
cpu.peek_a(addr) # peek_a is only on CPU → narrow cpu to obj_CPU
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def step(cpu, n)
|
|
29
|
+
cpu.cycles_advance(n) # cycles_advance only on CPU → narrow
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
c = CPU.new
|
|
33
|
+
puts fetch(c, 7) # 15
|
|
34
|
+
puts step(c, 3) # 103
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# A method body that reassigns one of its parameters to a value
|
|
2
|
+
# of an incompatible type (here: int call sites + string body
|
|
3
|
+
# write) needs the param's slot widened to `poly` so the
|
|
4
|
+
# generated C can hold both shapes via sp_RbVal. Without the
|
|
5
|
+
# widening the parameter slot stays at the call-site-inferred
|
|
6
|
+
# `mrb_int`, and the body's `lv_x = "forever"` assignment is
|
|
7
|
+
# `mrb_int = const char *` — rejected by gcc under
|
|
8
|
+
# `-Wint-conversion`.
|
|
9
|
+
|
|
10
|
+
class Logger
|
|
11
|
+
def report(label, hclk)
|
|
12
|
+
hclk = "forever" if hclk == 4294967295
|
|
13
|
+
puts label
|
|
14
|
+
puts hclk
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
l = Logger.new
|
|
19
|
+
l.report("running", 1234)
|
|
20
|
+
l.report("running", 4294967295)
|
|
21
|
+
l.report("done", 17)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Test pattern matching (case/in)
|
|
2
|
+
|
|
3
|
+
# Type-based matching
|
|
4
|
+
def describe(val)
|
|
5
|
+
case val
|
|
6
|
+
in Integer
|
|
7
|
+
"integer: #{val}"
|
|
8
|
+
in String
|
|
9
|
+
"string: #{val}"
|
|
10
|
+
in Float
|
|
11
|
+
"float"
|
|
12
|
+
in true | false
|
|
13
|
+
"boolean"
|
|
14
|
+
in nil
|
|
15
|
+
"nil"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
puts describe(42) # integer: 42
|
|
20
|
+
puts describe("hello") # string: hello
|
|
21
|
+
puts describe(3.14) # float
|
|
22
|
+
puts describe(true) # boolean
|
|
23
|
+
puts describe(nil) # nil
|
|
24
|
+
|
|
25
|
+
# Value matching
|
|
26
|
+
def check(x)
|
|
27
|
+
case x
|
|
28
|
+
in 0
|
|
29
|
+
"zero"
|
|
30
|
+
in 1
|
|
31
|
+
"one"
|
|
32
|
+
in Integer
|
|
33
|
+
"other int"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
puts check(0) # zero
|
|
38
|
+
puts check(1) # one
|
|
39
|
+
puts check(99) # other int
|
|
40
|
+
|
|
41
|
+
puts "done"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Test polymorphic variables (sp_RbValue)
|
|
2
|
+
|
|
3
|
+
# Variable holding different types
|
|
4
|
+
x = 1
|
|
5
|
+
puts x # 1
|
|
6
|
+
x = "hello"
|
|
7
|
+
puts x # hello
|
|
8
|
+
|
|
9
|
+
# Polymorphic method parameter
|
|
10
|
+
def show(val)
|
|
11
|
+
puts val
|
|
12
|
+
end
|
|
13
|
+
show(42)
|
|
14
|
+
show("world")
|
|
15
|
+
show(true)
|
|
16
|
+
show(3.14)
|
|
17
|
+
|
|
18
|
+
# Nilable
|
|
19
|
+
y = "found"
|
|
20
|
+
puts y # found
|
|
21
|
+
y = nil
|
|
22
|
+
puts y.nil? # true — but this needs nil tracking
|
|
23
|
+
|
|
24
|
+
puts "done"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Test Phase 2: heterogeneous arrays, bimorphic dispatch
|
|
2
|
+
|
|
3
|
+
# Heterogeneous array
|
|
4
|
+
arr = [1, "two", 3.0, true, nil]
|
|
5
|
+
arr.each do |x|
|
|
6
|
+
puts x
|
|
7
|
+
end
|
|
8
|
+
# 1, two, 3.0, true, (blank)
|
|
9
|
+
|
|
10
|
+
# Array with mixed types
|
|
11
|
+
nums = [10, 20, 30]
|
|
12
|
+
puts nums.length # 3
|
|
13
|
+
|
|
14
|
+
# Duck typing (bimorphic)
|
|
15
|
+
class Dog
|
|
16
|
+
def speak
|
|
17
|
+
"Woof!"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class Cat
|
|
22
|
+
def speak
|
|
23
|
+
"Meow!"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def make_noise(animal)
|
|
28
|
+
puts animal.speak
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
make_noise(Dog.new) # Woof!
|
|
32
|
+
make_noise(Cat.new) # Meow!
|
|
33
|
+
|
|
34
|
+
puts "done"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Test arithmetic on polymorphic values
|
|
2
|
+
|
|
3
|
+
def calc(a, b)
|
|
4
|
+
a + b
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
puts calc(10, 20) # 30
|
|
8
|
+
puts calc(1.5, 2.5) # 4.0
|
|
9
|
+
puts calc("hello", " world") # hello world
|
|
10
|
+
|
|
11
|
+
# Mixed numeric
|
|
12
|
+
def double(x)
|
|
13
|
+
x * 2
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
puts double(5) # 10
|
|
17
|
+
puts double(3.14) # 6.28
|
|
18
|
+
|
|
19
|
+
# Comparison
|
|
20
|
+
def bigger?(a, b)
|
|
21
|
+
a > b
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
puts bigger?(10, 5) # true
|
|
25
|
+
puts bigger?(1.0, 2.0) # false
|
|
26
|
+
|
|
27
|
+
# to_s on poly
|
|
28
|
+
def show(x)
|
|
29
|
+
puts x.to_s
|
|
30
|
+
end
|
|
31
|
+
show(42)
|
|
32
|
+
show("hi")
|
|
33
|
+
|
|
34
|
+
puts "done"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# `[A, B]` outer literal where A and B are non-ArrayNode expressions
|
|
2
|
+
# returning a typed `<X>_ptr_array` (e.g. `(0..N).map { ... }`).
|
|
3
|
+
# Without the fix, compile_array_literal's poly_array branch hits
|
|
4
|
+
# `box_value_to_poly(et, val)` for the CallNode element, which lowers
|
|
5
|
+
# to `sp_box_ptr_array(val)` — cls_id PTR_ARRAY only, the inner
|
|
6
|
+
# element type is erased. Subsequent `arr[b][i][j]` reads dispatch
|
|
7
|
+
# through the PTR_ARRAY arm at level 1, which boxes the next-level
|
|
8
|
+
# element as `sp_box_obj(p, 0)` (cls_id 0, "unknown obj"), and the
|
|
9
|
+
# level-2 dispatch can't match any cls_id arm — every leaf read
|
|
10
|
+
# returns 0.
|
|
11
|
+
#
|
|
12
|
+
# With the fix, the runtime conversion loop iterates the typed
|
|
13
|
+
# PtrArray and pushes each inner with `sp_box_<inner-type>` (e.g.
|
|
14
|
+
# `sp_box_int_array(...)` for an IntArray element), so the cls_id
|
|
15
|
+
# chain stays tagged through every level.
|
|
16
|
+
|
|
17
|
+
class C
|
|
18
|
+
def initialize
|
|
19
|
+
@a = [(0..3).map { |i| [i * 10, i * 10 + 1, i * 10 + 2] },
|
|
20
|
+
(0..3).map { |i| [i * 100, i * 100 + 1, i * 100 + 2] }]
|
|
21
|
+
end
|
|
22
|
+
def get(b, i, j); @a[b][i][j]; end
|
|
23
|
+
def out_len; @a.length; end
|
|
24
|
+
def mid_len(b); @a[b].length; end
|
|
25
|
+
def in_len(b, i); @a[b][i].length; end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
c = C.new
|
|
29
|
+
puts c.out_len # 2
|
|
30
|
+
puts c.mid_len(0) # 4
|
|
31
|
+
puts c.in_len(0, 0) # 3
|
|
32
|
+
puts c.get(0, 0, 0) # 0
|
|
33
|
+
puts c.get(0, 1, 1) # 11
|
|
34
|
+
puts c.get(0, 3, 2) # 32
|
|
35
|
+
puts c.get(1, 0, 0) # 0
|
|
36
|
+
puts c.get(1, 2, 1) # 201
|
|
37
|
+
puts c.get(1, 3, 2) # 302
|