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,113 @@
|
|
|
1
|
+
# ClassVariableReadNode -- `@@var`, plus expression-form
|
|
2
|
+
# ClassVariableWriteNode (the `@@x = ...` last-expression-as-return
|
|
3
|
+
# path) and several real-world class-var idioms.
|
|
4
|
+
#
|
|
5
|
+
# Spinel's class vars are independent per declaring class -- the
|
|
6
|
+
# ClassVariableWriteNode commit covers the storage-shape
|
|
7
|
+
# limitation in detail. This test exercises only patterns that
|
|
8
|
+
# stay inside one class's slot (no cross-hierarchy reads).
|
|
9
|
+
|
|
10
|
+
# 1. Singleton-counter idiom: class-method bumps a shared counter,
|
|
11
|
+
# instance-method reads it. Both routes touch @@count via the
|
|
12
|
+
# same @current_class_idx, so they share the cvar_Counter_count
|
|
13
|
+
# slot.
|
|
14
|
+
class Counter
|
|
15
|
+
@@count = 0
|
|
16
|
+
|
|
17
|
+
def self.tick
|
|
18
|
+
@@count = @@count + 1 # expression-form ClassVariableWriteNode
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.value
|
|
22
|
+
@@count # plain ClassVariableReadNode
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def instance_value
|
|
26
|
+
@@count # readable from instance methods too
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
puts Counter.value # 0
|
|
31
|
+
Counter.tick
|
|
32
|
+
Counter.tick
|
|
33
|
+
Counter.tick
|
|
34
|
+
puts Counter.value # 3
|
|
35
|
+
puts Counter.new.instance_value # 3 -- instance reads same slot
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# 2. Per-class isolation: two unrelated classes with the same cvar
|
|
39
|
+
# name get independent slots. Without the per-class qualification
|
|
40
|
+
# in cvar_qname, Counter.tick would have changed Other's count
|
|
41
|
+
# too.
|
|
42
|
+
class Other
|
|
43
|
+
@@count = 100
|
|
44
|
+
|
|
45
|
+
def self.value
|
|
46
|
+
@@count
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
puts Other.value # 100, unaffected by Counter.tick calls
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# 3. Cvar with explicit non-zero initial value at class body. Spinel
|
|
54
|
+
# folds the literal into the static C decl (compile-time), so the
|
|
55
|
+
# cvar enters the program with the source's value rather than the
|
|
56
|
+
# type default. Conditional rewrites at class body level (e.g.
|
|
57
|
+
# `if X; @@y = ...; end`) are NOT supported -- Spinel doesn't run
|
|
58
|
+
# class-body statements at startup, only constant assignments and
|
|
59
|
+
# method definitions get hoisted.
|
|
60
|
+
class Config
|
|
61
|
+
@@debug = true
|
|
62
|
+
@@max_retries = 5
|
|
63
|
+
|
|
64
|
+
def self.debug?; @@debug; end
|
|
65
|
+
def self.max_retries; @@max_retries; end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
puts Config.debug? # true (folded into static decl)
|
|
69
|
+
puts Config.max_retries # 5
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# 4. Cvar updated across many class-method calls -- the cumulative
|
|
73
|
+
# state lives in the cvar slot, not in any temporary. Chained
|
|
74
|
+
# `.add(n).add(m)` returning self isn't supported in Spinel
|
|
75
|
+
# (class methods are static C functions with no self), so we
|
|
76
|
+
# call separately.
|
|
77
|
+
class Tally
|
|
78
|
+
@@total = 0
|
|
79
|
+
|
|
80
|
+
def self.add(n)
|
|
81
|
+
@@total = @@total + n
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def self.total
|
|
85
|
+
@@total
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
Tally.add(10)
|
|
90
|
+
Tally.add(20)
|
|
91
|
+
Tally.add(12)
|
|
92
|
+
puts Tally.total # 42
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# 5. Cvar mutation across instance and class methods of the same
|
|
96
|
+
# class. Real Ruby code mixes these freely (e.g. ActiveRecord
|
|
97
|
+
# counter caches).
|
|
98
|
+
class Registry
|
|
99
|
+
@@items = 0
|
|
100
|
+
|
|
101
|
+
def self.count
|
|
102
|
+
@@items
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def register
|
|
106
|
+
@@items = @@items + 1
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
r = Registry.new
|
|
111
|
+
r.register
|
|
112
|
+
r.register
|
|
113
|
+
puts Registry.count # 2
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ClassVariableWriteNode -- `@@var = value`.
|
|
2
|
+
#
|
|
3
|
+
# Spinel stores cvars as per-(class, name) C globals named
|
|
4
|
+
# `cvar_<ClassName>_<var>`. The static declaration is emitted at
|
|
5
|
+
# file scope alongside constants; ClassVariableReadNode (next
|
|
6
|
+
# commit) consumes the same storage.
|
|
7
|
+
#
|
|
8
|
+
# This commit's test only exercises the write side -- a follow-up
|
|
9
|
+
# Read commit prints @@count to verify round-trip.
|
|
10
|
+
|
|
11
|
+
class Counter
|
|
12
|
+
@@count = 0
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Other
|
|
16
|
+
@@count = 99 # independent slot from Counter's @@count
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
puts "ok"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ok
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# When the same ivar is registered on both a child class and a
|
|
2
|
+
# parent, the C struct embeds the parent's field at the parent's
|
|
3
|
+
# recorded type (`emit_class_fields` skips own copies that are also
|
|
4
|
+
# in the parent chain). `cls_ivar_type` used to return the child's
|
|
5
|
+
# own-table entry — letting downstream emit sites disagree with
|
|
6
|
+
# the actual struct field type.
|
|
7
|
+
|
|
8
|
+
class Parent
|
|
9
|
+
def initialize
|
|
10
|
+
@x = 0
|
|
11
|
+
@x = "s" # heterogeneous int+string → @x widens to poly
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Child < Parent
|
|
16
|
+
def initialize
|
|
17
|
+
super
|
|
18
|
+
@x = 7 # write through the inherited (poly) slot
|
|
19
|
+
end
|
|
20
|
+
def read_x
|
|
21
|
+
@x
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
c = Child.new
|
|
26
|
+
# Reading back via a Child-defined method that emits `self->iv_x`.
|
|
27
|
+
# Without the fix, cls_ivar_type(Child, "@x") returned the int from
|
|
28
|
+
# Child's own table; the struct field is sp_RbVal (Parent's poly);
|
|
29
|
+
# the read miscompiled / yielded a garbage int. With the fix the
|
|
30
|
+
# emit goes through the poly read path and unboxes correctly.
|
|
31
|
+
v = c.read_x
|
|
32
|
+
puts v # 7
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `Klass.method(:cls_meth)` returns a Method object that wraps a
|
|
2
|
+
# class method (`def self.foo`). Spinel previously only handled
|
|
3
|
+
# instance-receiver `obj.method(:bar)`, so the class-receiver form
|
|
4
|
+
# fell through to the unresolved-call fallback (emitting `0`) and
|
|
5
|
+
# the captured "Method" was actually an int. Subsequent
|
|
6
|
+
# `.call(args)` then warned `cannot resolve call to 'call' on int`
|
|
7
|
+
# and returned 0.
|
|
8
|
+
#
|
|
9
|
+
# Repro: capture two class methods on the same class, then call
|
|
10
|
+
# both via `.call`. The wrapping must:
|
|
11
|
+
# - infer the result as `obj_Method` (not int),
|
|
12
|
+
# - mark the underlying cls method as live (so the adapter
|
|
13
|
+
# trampoline's `sp_<Klass>_cls_<m>` reference resolves at
|
|
14
|
+
# link time — without the live-mark the body is DCE'd and the
|
|
15
|
+
# C link fails),
|
|
16
|
+
# - bind through an adapter that absorbs the dispatch ABI's
|
|
17
|
+
# `void *self` slot (class methods have no `self *` param).
|
|
18
|
+
|
|
19
|
+
class CPU
|
|
20
|
+
def self.poke_nop(addr, data)
|
|
21
|
+
addr + data
|
|
22
|
+
end
|
|
23
|
+
def self.poke_log(addr, data)
|
|
24
|
+
addr * 2 + data
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
m1 = CPU.method(:poke_nop)
|
|
29
|
+
m2 = CPU.method(:poke_log)
|
|
30
|
+
puts m1.call(10, 5)
|
|
31
|
+
puts m2.call(10, 5)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Regression for the `String#rindex` nil-guard in
|
|
2
|
+
# `collect_class_with_prefix`. A `class Sub < Parent` written
|
|
3
|
+
# inside a single-level `module M` triggers the parent-resolution
|
|
4
|
+
# walk that strips trailing `_<segment>` from the module prefix.
|
|
5
|
+
# `mp = "M"` has no underscore, so `mp.rindex("_")` returns nil
|
|
6
|
+
# under CRuby (and -1 under spinel). The pre-fix `if idx < 0`
|
|
7
|
+
# crashed on the CRuby path with `NoMethodError: undefined
|
|
8
|
+
# method '<' for nil`.
|
|
9
|
+
|
|
10
|
+
module M
|
|
11
|
+
class Sub < Object
|
|
12
|
+
def hello; puts "hi"; end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
M::Sub.new.hello
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
hi
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Regression for the `String#index` nil-guard in
|
|
2
|
+
# `current_lexical_scope_name`. A toplevel `def show` body that
|
|
3
|
+
# reads a CONSTANT routes through `resolve_const_read_name`, which
|
|
4
|
+
# calls `current_lexical_scope_name`. Inside that helper,
|
|
5
|
+
# `@current_method_name.index("_cls_")` looks for the class-method
|
|
6
|
+
# name marker — for a toplevel def the marker isn't present, so
|
|
7
|
+
# CRuby's `String#index` returns nil while spinel's runtime
|
|
8
|
+
# returns -1. The pre-fix `if cls_idx >= 0` crashed on the CRuby
|
|
9
|
+
# path with `NoMethodError: undefined method '>=' for nil`.
|
|
10
|
+
|
|
11
|
+
FOO = 42
|
|
12
|
+
def show; puts FOO; end
|
|
13
|
+
show
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
42
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class Temperature
|
|
2
|
+
attr_reader :degrees
|
|
3
|
+
def initialize(d)
|
|
4
|
+
@degrees = d
|
|
5
|
+
end
|
|
6
|
+
def <=>(other)
|
|
7
|
+
@degrees - other.degrees
|
|
8
|
+
end
|
|
9
|
+
def <(other); (self <=> other) < 0; end
|
|
10
|
+
def >(other); (self <=> other) > 0; end
|
|
11
|
+
def ==(other); (self <=> other) == 0; end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
t1 = Temperature.new(100)
|
|
15
|
+
t2 = Temperature.new(200)
|
|
16
|
+
t3 = Temperature.new(100)
|
|
17
|
+
puts t1 < t2 # true
|
|
18
|
+
puts t2 > t1 # true
|
|
19
|
+
puts t1 == t3 # true
|
|
20
|
+
puts t1 > t2 # false
|
|
21
|
+
puts "done"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# A constant initializer's RHS can introduce block params (here
|
|
2
|
+
# `n`) whose declarations need to land at main()'s frame. The
|
|
3
|
+
# top-level-stmt scan in `emit_main` previously skipped const-init
|
|
4
|
+
# expressions, so iterations whose body assigns `lv_n` without a
|
|
5
|
+
# preceding `mrb_int lv_n;` (e.g. the `Array#sum { |n| ... }`
|
|
6
|
+
# emit path uses `emit_iter_open`, which does plain `elem_var =
|
|
7
|
+
# idx_var;`) failed C compilation with "undeclared identifier".
|
|
8
|
+
|
|
9
|
+
TOTAL = [1, 2, 3].sum { |n| n * 2 }
|
|
10
|
+
puts TOTAL # 12
|
|
11
|
+
|
|
12
|
+
DOUBLED = [4, 5, 6].sum { |m| m * 3 }
|
|
13
|
+
puts DOUBLED # 45
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# ConstantPath access — covers ARGV (top-level builtin), built-in
|
|
2
|
+
# constructors (::Array.new etc.), nested const reads (A::B::C),
|
|
3
|
+
# class-method dispatch (A::B.create), and the relative-vs-root
|
|
4
|
+
# scope distinction (RootNS::Mid::LEAF vs ::RootNS::Mid::LEAF).
|
|
5
|
+
# Merged from constant_path_{argv,builtin_new,class_method,
|
|
6
|
+
# nested_read,new}.rb. The class-method section's `A::B` (a class)
|
|
7
|
+
# would collide with the nested-read section's `A::B::C` (where
|
|
8
|
+
# A::B is a module), so the class-method section is namespaced as
|
|
9
|
+
# CmA::CmB to keep both shapes co-resident.
|
|
10
|
+
|
|
11
|
+
# ---- ARGV access via ConstantPath ----
|
|
12
|
+
# Runs at top-level scope so sp_argv is in scope (sp_argv is only
|
|
13
|
+
# declared in main()).
|
|
14
|
+
puts ARGV.length
|
|
15
|
+
puts ::ARGV.length
|
|
16
|
+
puts(ARGV[0] == nil)
|
|
17
|
+
puts(::ARGV[0] == nil)
|
|
18
|
+
|
|
19
|
+
# ---- Built-in constructors via absolute ConstantPath ----
|
|
20
|
+
require "stringio"
|
|
21
|
+
|
|
22
|
+
bia = ::Array.new(3, 2)
|
|
23
|
+
puts bia[0] + bia[2]
|
|
24
|
+
|
|
25
|
+
bih = ::Hash.new
|
|
26
|
+
bih["k"] = bia[1]
|
|
27
|
+
puts bih["k"]
|
|
28
|
+
|
|
29
|
+
bip = ::Proc.new { |x| x + 1 }
|
|
30
|
+
puts bip.call(5)
|
|
31
|
+
|
|
32
|
+
bis = ::StringIO.new("ab")
|
|
33
|
+
puts bis.getc
|
|
34
|
+
|
|
35
|
+
bif = ::Fiber.new { |x|
|
|
36
|
+
::Fiber.yield(x + 1)
|
|
37
|
+
x + 2
|
|
38
|
+
}
|
|
39
|
+
puts bif.resume(4)
|
|
40
|
+
puts bif.resume(4)
|
|
41
|
+
|
|
42
|
+
bicur = ::Fiber.current
|
|
43
|
+
puts bicur.alive?
|
|
44
|
+
|
|
45
|
+
# ---- ConstantPath class-method dispatch (A::B.create) ----
|
|
46
|
+
module CmA
|
|
47
|
+
class CmB
|
|
48
|
+
def self.create(x)
|
|
49
|
+
x + 1
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
puts CmA::CmB.create(41)
|
|
54
|
+
puts ::CmA::CmB.create(99)
|
|
55
|
+
|
|
56
|
+
# ---- Nested ConstantPath reads (A::B::C, M::C::X) ----
|
|
57
|
+
module A
|
|
58
|
+
module B
|
|
59
|
+
C = 7
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
module M
|
|
63
|
+
class C
|
|
64
|
+
X = 11
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
puts A::B::C
|
|
68
|
+
puts ::A::B::C
|
|
69
|
+
puts M::C::X
|
|
70
|
+
puts ::M::C::X
|
|
71
|
+
|
|
72
|
+
# Relative path prefers lexical scope; `::` forces root scope.
|
|
73
|
+
module RootNS
|
|
74
|
+
module Mid
|
|
75
|
+
LEAF = 31
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
module Lex
|
|
79
|
+
module RootNS
|
|
80
|
+
module Mid
|
|
81
|
+
LEAF = 47
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
def self.pick_relative
|
|
85
|
+
RootNS::Mid::LEAF
|
|
86
|
+
end
|
|
87
|
+
def self.pick_root
|
|
88
|
+
::RootNS::Mid::LEAF
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
puts Lex.pick_relative
|
|
92
|
+
puts Lex.pick_root
|
|
93
|
+
|
|
94
|
+
# ---- Top-level constructor via absolute ConstantPath (::TopC.new) ----
|
|
95
|
+
# Renamed from `class C` to TopC to keep it distinct from M::C above.
|
|
96
|
+
class TopC
|
|
97
|
+
def initialize
|
|
98
|
+
puts "init"
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
puts "start"
|
|
102
|
+
::TopC.new
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Test module constants and top-level constants
|
|
2
|
+
|
|
3
|
+
MAX_SIZE = 100
|
|
4
|
+
PI_APPROX = 3
|
|
5
|
+
NAME = "spinel"
|
|
6
|
+
|
|
7
|
+
module Config
|
|
8
|
+
VERSION = 42
|
|
9
|
+
GREETING = "hello"
|
|
10
|
+
ENABLED = true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
puts MAX_SIZE # 100
|
|
14
|
+
puts PI_APPROX # 3
|
|
15
|
+
puts NAME # spinel
|
|
16
|
+
puts Config::VERSION # 42
|
|
17
|
+
puts Config::GREETING # hello
|
|
18
|
+
puts Config::ENABLED # true
|
|
19
|
+
|
|
20
|
+
# Constants in expressions
|
|
21
|
+
puts MAX_SIZE + 1 # 101
|
|
22
|
+
puts NAME.length # 6
|
|
23
|
+
puts Config::GREETING.upcase # HELLO
|
|
24
|
+
|
|
25
|
+
# Lexical constant reads inside module/class initializers
|
|
26
|
+
module LexicalConst
|
|
27
|
+
A = 10
|
|
28
|
+
B = A + 1
|
|
29
|
+
|
|
30
|
+
class C
|
|
31
|
+
X = 7
|
|
32
|
+
Y = X + 2
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
module N
|
|
36
|
+
P = A + 3
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
puts LexicalConst::B # 11
|
|
41
|
+
puts LexicalConst::C::Y # 9
|
|
42
|
+
puts LexicalConst::N::P # 13
|
|
43
|
+
|
|
44
|
+
puts "done"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Test control flow additions
|
|
2
|
+
|
|
3
|
+
# __LINE__
|
|
4
|
+
puts __LINE__ # 4
|
|
5
|
+
|
|
6
|
+
# defined? on known variable
|
|
7
|
+
x = 42
|
|
8
|
+
puts defined?(x) ? "yes" : "no" # yes
|
|
9
|
+
|
|
10
|
+
# String freeze (no-op in AOT)
|
|
11
|
+
s = "hello"
|
|
12
|
+
puts s # hello
|
|
13
|
+
|
|
14
|
+
# Modifier if/unless
|
|
15
|
+
y = 10
|
|
16
|
+
puts "big" if y > 5 # big
|
|
17
|
+
puts "small" unless y > 100 # small
|
|
18
|
+
|
|
19
|
+
# Ternary chains
|
|
20
|
+
a = 3
|
|
21
|
+
puts(a == 1 ? "one" : a == 2 ? "two" : a == 3 ? "three" : "other") # three
|
|
22
|
+
|
|
23
|
+
puts "done"
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Issue #49 (default args at call sites) and the scope follow-ups.
|
|
2
|
+
# Merged from default_arg_{ctor,method,inherited,partial,self_call,
|
|
3
|
+
# callee_scope}.rb. Each section covers a distinct dispatch path;
|
|
4
|
+
# the original split had only the dispatch path varying, so the
|
|
5
|
+
# class shapes mostly didn't collide. Where they did (`Foo` was
|
|
6
|
+
# reused in self_call and callee_scope for unrelated purposes) the
|
|
7
|
+
# names are made path-specific (SelfDefault / CalleeFoo).
|
|
8
|
+
|
|
9
|
+
# ---- Constructor default ----
|
|
10
|
+
# `Counter.new` (no arg) and `Counter.new(7)` both need to compile.
|
|
11
|
+
class Counter
|
|
12
|
+
def initialize(start = 0)
|
|
13
|
+
@n = start
|
|
14
|
+
end
|
|
15
|
+
attr_reader :n
|
|
16
|
+
end
|
|
17
|
+
puts Counter.new.n # 0
|
|
18
|
+
puts Counter.new(7).n # 7
|
|
19
|
+
|
|
20
|
+
# ---- Instance method default + inherited dispatch ----
|
|
21
|
+
# Same Greeter covers both: direct call and a subclass inheriting
|
|
22
|
+
# the defaulted method without redefining it.
|
|
23
|
+
class Greeter
|
|
24
|
+
def hello(name = "world")
|
|
25
|
+
puts "Hello, #{name}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
class GreeterChild < Greeter
|
|
29
|
+
end
|
|
30
|
+
Greeter.new.hello # Hello, world
|
|
31
|
+
Greeter.new.hello("Ruby") # Hello, Ruby
|
|
32
|
+
GreeterChild.new.hello # Hello, world
|
|
33
|
+
GreeterChild.new.hello("Ruby") # Hello, Ruby
|
|
34
|
+
|
|
35
|
+
# ---- Partial defaulting ----
|
|
36
|
+
# Caller supplies some leading positional args; trailing defaults
|
|
37
|
+
# fill the rest.
|
|
38
|
+
class M
|
|
39
|
+
def f(a, b = 1, c = 2)
|
|
40
|
+
puts a + b + c
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
m = M.new
|
|
44
|
+
m.f(10) # 13
|
|
45
|
+
m.f(10, 20) # 32
|
|
46
|
+
m.f(10, 20, 30) # 60
|
|
47
|
+
|
|
48
|
+
# ---- Implicit-self call inside same class ----
|
|
49
|
+
# Bare-method dispatch from within a class body must also fill in
|
|
50
|
+
# the callee's defaults; previously this path called compile_call
|
|
51
|
+
# _args without the defaults map.
|
|
52
|
+
class SelfDefault
|
|
53
|
+
def initialize
|
|
54
|
+
bar
|
|
55
|
+
bar(99)
|
|
56
|
+
end
|
|
57
|
+
def bar(x = 42)
|
|
58
|
+
puts x
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
SelfDefault.new
|
|
62
|
+
# 42
|
|
63
|
+
# 99
|
|
64
|
+
|
|
65
|
+
# ---- Default expression reads @ivar ----
|
|
66
|
+
# The inlined default expansion at the caller's site must resolve
|
|
67
|
+
# against the call's *receiver* (here Wrapper#grab's recv `@w`),
|
|
68
|
+
# not the caller's `self`. WrapperCaller has no @base, so a naive
|
|
69
|
+
# inlining would either fail to compile or read the wrong instance.
|
|
70
|
+
class Wrapper
|
|
71
|
+
def initialize(seed)
|
|
72
|
+
@base = seed
|
|
73
|
+
end
|
|
74
|
+
def grab(target = @base * 10)
|
|
75
|
+
target
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
class WrapperCaller
|
|
79
|
+
def initialize
|
|
80
|
+
@w = Wrapper.new(3)
|
|
81
|
+
end
|
|
82
|
+
def go
|
|
83
|
+
@w.grab
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
puts WrapperCaller.new.go # 30
|
|
87
|
+
|
|
88
|
+
# ---- Default expression calls a same-class bare method ----
|
|
89
|
+
# CallerBar defines its own `target` returning 2, but CalleeFoo's
|
|
90
|
+
# default-arg `target` must still dispatch to CalleeFoo#target
|
|
91
|
+
# (returning 1) rather than the caller's vtable.
|
|
92
|
+
class CalleeFoo
|
|
93
|
+
def target
|
|
94
|
+
1
|
|
95
|
+
end
|
|
96
|
+
def foo(opt = target)
|
|
97
|
+
opt
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
class CallerBar
|
|
101
|
+
def target
|
|
102
|
+
2 # different value — must NOT be picked up by CalleeFoo#foo
|
|
103
|
+
end
|
|
104
|
+
def check
|
|
105
|
+
CalleeFoo.new.foo
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
puts CallerBar.new.check # 1
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# `def initialize(conf = ARGV)` typed `conf` as the specialised
|
|
2
|
+
# `argv` scalar (because `infer_type(ARGV) == "argv"`). A caller
|
|
3
|
+
# that passes a single string then unified the call-site `string`
|
|
4
|
+
# against `argv` — the unifier had no argv-vs-string rule, so it
|
|
5
|
+
# dropped to the catch-all poly tail. `conf` widened to poly and
|
|
6
|
+
# `Wrapper.new(conf)` (which expects a String) received a poly arg,
|
|
7
|
+
# miscompiling the inner `@s.length` read.
|
|
8
|
+
#
|
|
9
|
+
# Narrowing argv + string → string biases toward the call-site
|
|
10
|
+
# shape: single-string entry points don't drag the whole signature
|
|
11
|
+
# into poly, while genuinely-array-of-strings call sites still
|
|
12
|
+
# unify on their own type via the existing array-array path.
|
|
13
|
+
|
|
14
|
+
class Wrapper
|
|
15
|
+
def initialize(s)
|
|
16
|
+
@s = s
|
|
17
|
+
end
|
|
18
|
+
def show
|
|
19
|
+
puts @s.length
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class Entry
|
|
24
|
+
def initialize(conf = ARGV)
|
|
25
|
+
@conf = Wrapper.new(conf)
|
|
26
|
+
end
|
|
27
|
+
def show
|
|
28
|
+
@conf.show
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Entry.new("hello").show # 5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5
|