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,401 @@
|
|
|
1
|
+
# Bundled tests:
|
|
2
|
+
# - local_or_and_write
|
|
3
|
+
# - multi_target_nested
|
|
4
|
+
# - numbered_block_params
|
|
5
|
+
# - numbered_params_destructure
|
|
6
|
+
# - parens_multi_stmt_and_local_write_expr
|
|
7
|
+
# - sort_reduce
|
|
8
|
+
# - gc_root_map_accumulator
|
|
9
|
+
# - gc_root_range_and_times_map
|
|
10
|
+
# - transpose_gc_root
|
|
11
|
+
# - utf8
|
|
12
|
+
|
|
13
|
+
# === local_or_and_write ===
|
|
14
|
+
def t_local_or_and_write
|
|
15
|
+
# `LocalVariableOrWriteNode` (`a ||= b`) and
|
|
16
|
+
# `LocalVariableAndWriteNode` (`a &&= b`) parse as their own
|
|
17
|
+
# AST nodes — distinct from `LocalVariableOperatorWriteNode`
|
|
18
|
+
# (which carries `+`, `-`, `*`, etc. via a binary_operator field).
|
|
19
|
+
# Without dedicated parser cases the prism nodes were dropped on
|
|
20
|
+
# the floor, so `a ||= b` produced no C output.
|
|
21
|
+
|
|
22
|
+
# (1) Statement-form ||=
|
|
23
|
+
a = nil
|
|
24
|
+
a ||= 10
|
|
25
|
+
puts a # 10
|
|
26
|
+
a ||= 99 # already truthy → no-op
|
|
27
|
+
puts a # 10
|
|
28
|
+
|
|
29
|
+
# (2) Statement-form &&=
|
|
30
|
+
b = 5
|
|
31
|
+
b &&= b + 1
|
|
32
|
+
puts b # 6
|
|
33
|
+
c = nil
|
|
34
|
+
c &&= 99 # nil → no-op
|
|
35
|
+
puts c.nil? ? "nil" : c.to_s # nil
|
|
36
|
+
|
|
37
|
+
# (3) Expression-form ||=
|
|
38
|
+
x = nil
|
|
39
|
+
y = (x ||= 7)
|
|
40
|
+
puts x # 7
|
|
41
|
+
puts y # 7
|
|
42
|
+
|
|
43
|
+
# (4) Expression-form &&=
|
|
44
|
+
p = 3
|
|
45
|
+
q = (p &&= p * 2)
|
|
46
|
+
puts p # 6
|
|
47
|
+
puts q # 6
|
|
48
|
+
end
|
|
49
|
+
t_local_or_and_write
|
|
50
|
+
|
|
51
|
+
# === multi_target_nested ===
|
|
52
|
+
def t_multi_target_nested
|
|
53
|
+
# MultiTargetNode -- nested LHS in destructuring multi-assign.
|
|
54
|
+
#
|
|
55
|
+
# a, (b, c), d = 1, [2, 3], 4
|
|
56
|
+
#
|
|
57
|
+
# Each parenthesized group on the LHS is a MultiTargetNode that
|
|
58
|
+
# recursively unpacks its slot of the RHS. Spinel routes through
|
|
59
|
+
# emit_multi_write_target which dispatches on the target node type.
|
|
60
|
+
# The inner-array RHS slot must be a typed-array (int_array, str_array,
|
|
61
|
+
# or float_array). Two-level nesting where intermediate slots are
|
|
62
|
+
# heterogeneous (poly_array) is out of scope -- documented inline.
|
|
63
|
+
|
|
64
|
+
a, (b, c), d = 1, [2, 3], 4
|
|
65
|
+
puts a # 1
|
|
66
|
+
puts b # 2
|
|
67
|
+
puts c # 3
|
|
68
|
+
puts d # 4
|
|
69
|
+
|
|
70
|
+
# String-typed inner array
|
|
71
|
+
x, (s, t), y = 10, ["hello", "world"], 20
|
|
72
|
+
puts x # 10
|
|
73
|
+
puts s # hello
|
|
74
|
+
puts t # world
|
|
75
|
+
puts y # 20
|
|
76
|
+
end
|
|
77
|
+
t_multi_target_nested
|
|
78
|
+
|
|
79
|
+
# === numbered_block_params ===
|
|
80
|
+
def t_numbered_block_params
|
|
81
|
+
# Numbered block params (`_1`) and Ruby 3.4 implicit `it`.
|
|
82
|
+
#
|
|
83
|
+
# `_1` was already supported via Prism's NumberedParametersNode + a
|
|
84
|
+
# regular LocalVariableReadNode at the use site. Implicit `it` (Ruby
|
|
85
|
+
# 3.4) was emitted as PM_IT_PARAMETERS_NODE / PM_IT_LOCAL_VARIABLE_READ_NODE
|
|
86
|
+
# which the codegen had no handler for. spinel_parse now lowers both
|
|
87
|
+
# to their `_1` equivalents so the codegen reuses the existing path.
|
|
88
|
+
|
|
89
|
+
# 1. `_1` over an int array — each.
|
|
90
|
+
[1, 2, 3].each { puts _1 }
|
|
91
|
+
# 1
|
|
92
|
+
# 2
|
|
93
|
+
# 3
|
|
94
|
+
|
|
95
|
+
# 2. `_1` over a map+each chain.
|
|
96
|
+
[10, 20].map { _1 * 2 }.each { puts _1 }
|
|
97
|
+
# 20
|
|
98
|
+
# 40
|
|
99
|
+
|
|
100
|
+
# 3. `it` over an int array — each with arithmetic.
|
|
101
|
+
[1, 2, 3].each { puts it * 2 }
|
|
102
|
+
# 2
|
|
103
|
+
# 4
|
|
104
|
+
# 6
|
|
105
|
+
|
|
106
|
+
# 4. `it` over a map+each chain.
|
|
107
|
+
[10, 20, 30].map { it * 2 }.each { puts it }
|
|
108
|
+
# 20
|
|
109
|
+
# 40
|
|
110
|
+
# 60
|
|
111
|
+
|
|
112
|
+
# 5. `it` mixed with arithmetic and comparison.
|
|
113
|
+
[1, 2, 3, 4].select { it > 2 }.each { puts it }
|
|
114
|
+
# 3
|
|
115
|
+
# 4
|
|
116
|
+
|
|
117
|
+
# 6. `it` over a string array.
|
|
118
|
+
["alice", "bob"].each { puts it }
|
|
119
|
+
# alice
|
|
120
|
+
# bob
|
|
121
|
+
end
|
|
122
|
+
t_numbered_block_params
|
|
123
|
+
|
|
124
|
+
# === numbered_params_destructure ===
|
|
125
|
+
def t_numbered_params_destructure
|
|
126
|
+
# Multi-arg numbered block params (`_1`, `_2`, ...) should destructure
|
|
127
|
+
# the yielded sub-array. Pre-fix: `_1` binds to the whole element
|
|
128
|
+
# (the sp_IntArray pointer) and `_2` is uninitialized -> "<ptr>=0".
|
|
129
|
+
# CRuby ref: arity-N blocks over a single Array argument auto-destructure.
|
|
130
|
+
|
|
131
|
+
# Plain int-tuple sub-arrays - max=2 destructure
|
|
132
|
+
[[1, 10], [2, 20], [3, 30]].each { puts "#{_1}=#{_2}" }
|
|
133
|
+
|
|
134
|
+
# Three-element sub-arrays exercise _3
|
|
135
|
+
[[1, 2, 3], [10, 20, 30]].each { puts "#{_1}-#{_2}-#{_3}" }
|
|
136
|
+
|
|
137
|
+
# Sum of paired elements via destructured slots in `.each`
|
|
138
|
+
total = 0
|
|
139
|
+
[[1, 100], [2, 200], [3, 300]].each { total = total + _1 + _2 }
|
|
140
|
+
puts total
|
|
141
|
+
|
|
142
|
+
# Two-stage: outer each with _1+_2, inner reuse outside the block
|
|
143
|
+
running = 0
|
|
144
|
+
[[10, 1], [20, 2], [30, 3]].each { running = running + _1 - _2 }
|
|
145
|
+
puts running
|
|
146
|
+
|
|
147
|
+
# Short sub-array regression — pre-fix the destructure read past the
|
|
148
|
+
# sub-array's data buffer (OOB) when the yielded element was shorter
|
|
149
|
+
# than the block's max numbered param. The fix bounds-checks each slot
|
|
150
|
+
# read and pads with 0 (typed-nil analogue). This test computes the
|
|
151
|
+
# sum of `_1 + _2` only when `_2` is not nil (so CRuby gets the same
|
|
152
|
+
# numbers as Spinel — Spinel's typed-zero already passes the .nil?
|
|
153
|
+
# false branch). `_2` is mentioned in the block so destruct_n >= 2.
|
|
154
|
+
short_total = 0
|
|
155
|
+
[[1], [2, 20], [3, 30]].each { short_total = short_total + _1 + (_2.nil? ? 0 : _2) }
|
|
156
|
+
puts short_total
|
|
157
|
+
end
|
|
158
|
+
t_numbered_params_destructure
|
|
159
|
+
|
|
160
|
+
# === parens_multi_stmt_and_local_write_expr ===
|
|
161
|
+
def t_parens_multi_stmt_and_local_write_expr
|
|
162
|
+
# Verify two expression-context constructs:
|
|
163
|
+
# - `(stmt1; stmt2; ...; expr)` — leading statements run for
|
|
164
|
+
# side effects; the value of the parens is the last expression.
|
|
165
|
+
# - `local = expr` and `local OP= expr` used as expressions —
|
|
166
|
+
# they assign and yield the new value of the local.
|
|
167
|
+
|
|
168
|
+
# (1) Multi-stmt parens — leading side effects must run.
|
|
169
|
+
x = 0
|
|
170
|
+
y = (x = x + 1; x = x + 1; x)
|
|
171
|
+
puts x # 2
|
|
172
|
+
puts y # 2
|
|
173
|
+
|
|
174
|
+
# (2) `local = expr` as the value of an outer expression.
|
|
175
|
+
a = 0
|
|
176
|
+
b = (a = 5)
|
|
177
|
+
puts a # 5
|
|
178
|
+
puts b # 5
|
|
179
|
+
|
|
180
|
+
# (3) `local OP= expr` as the value of an outer expression.
|
|
181
|
+
c = 10
|
|
182
|
+
d = (c += 3)
|
|
183
|
+
puts c # 13
|
|
184
|
+
puts d # 13
|
|
185
|
+
end
|
|
186
|
+
t_parens_multi_stmt_and_local_write_expr
|
|
187
|
+
|
|
188
|
+
# === sort_reduce ===
|
|
189
|
+
def t_sort_reduce
|
|
190
|
+
# Test Array#sort, reduce, min, max, sum
|
|
191
|
+
|
|
192
|
+
arr = (1..10).to_a
|
|
193
|
+
arr.reverse!
|
|
194
|
+
|
|
195
|
+
# sort
|
|
196
|
+
sorted = arr.sort
|
|
197
|
+
puts sorted.first # 1
|
|
198
|
+
puts sorted.last # 10
|
|
199
|
+
|
|
200
|
+
# min/max/sum
|
|
201
|
+
puts arr.min # 1
|
|
202
|
+
puts arr.max # 10
|
|
203
|
+
puts arr.sum # 55
|
|
204
|
+
|
|
205
|
+
# reduce
|
|
206
|
+
puts arr.reduce(0) { |sum, x| sum + x } # 55
|
|
207
|
+
puts arr.reduce(1) { |prod, x| prod * x } # 3628800
|
|
208
|
+
|
|
209
|
+
# inject (alias)
|
|
210
|
+
puts arr.inject(0) { |s, x| s + x } # 55
|
|
211
|
+
end
|
|
212
|
+
t_sort_reduce
|
|
213
|
+
|
|
214
|
+
# === gc_root_map_accumulator ===
|
|
215
|
+
def t_gc_root_map_accumulator
|
|
216
|
+
# A nested map block — outer iteration allocates plenty of inner
|
|
217
|
+
# objects via sp_*_new — can trigger a GC pass between pushes
|
|
218
|
+
# into the outer accumulator. Without rooting the accumulator,
|
|
219
|
+
# GC frees it as unreachable; the next push then writes into
|
|
220
|
+
# freed memory and corrupts malloc bookkeeping, surfacing as a
|
|
221
|
+
# SIGSEGV in _int_malloc on the next allocation.
|
|
222
|
+
#
|
|
223
|
+
# Each .map below crosses spinel's 256KB GC threshold mid-loop
|
|
224
|
+
# (each block iteration allocates a discarded scratch string
|
|
225
|
+
# alongside the kept result), so the outer accumulator must be
|
|
226
|
+
# rooted to survive a collection.
|
|
227
|
+
|
|
228
|
+
# (1) int_array recv → StrArray accumulator (string-return block).
|
|
229
|
+
ints = []
|
|
230
|
+
i = 0
|
|
231
|
+
while i < 20000
|
|
232
|
+
ints << i
|
|
233
|
+
i += 1
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
r1 = ints.map do |x|
|
|
237
|
+
_scratch = "scratch-#{x}-discarded-inner-allocation-padding"
|
|
238
|
+
"kept-string-value-#{x}"
|
|
239
|
+
end
|
|
240
|
+
puts r1.length # 20000
|
|
241
|
+
puts r1[0] # kept-string-value-0
|
|
242
|
+
puts r1[19999][-3, 3] # 999
|
|
243
|
+
|
|
244
|
+
# (2) int_array recv → IntArray accumulator (int-return block).
|
|
245
|
+
r2 = ints.map do |x|
|
|
246
|
+
_scratch = "scratch-#{x}-discarded-inner-allocation-padding"
|
|
247
|
+
x * 2
|
|
248
|
+
end
|
|
249
|
+
puts r2.length # 20000
|
|
250
|
+
puts r2[0] # 0
|
|
251
|
+
puts r2[19999] # 39998
|
|
252
|
+
|
|
253
|
+
# (3) str_array recv → StrArray accumulator (string-return block).
|
|
254
|
+
strs = []
|
|
255
|
+
i = 0
|
|
256
|
+
while i < 20000
|
|
257
|
+
strs << "src-#{i}"
|
|
258
|
+
i += 1
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
r3 = strs.map do |s|
|
|
262
|
+
_scratch = "scratch-#{s}-discarded-inner-allocation-padding"
|
|
263
|
+
"out-#{s}"
|
|
264
|
+
end
|
|
265
|
+
puts r3.length # 20000
|
|
266
|
+
puts r3[0] # out-src-0
|
|
267
|
+
puts r3[19999][-3, 3] # 999
|
|
268
|
+
|
|
269
|
+
# (4) str_array recv → IntArray accumulator (int-return block).
|
|
270
|
+
r4 = strs.map do |s|
|
|
271
|
+
_scratch = "scratch-#{s}-discarded-inner-allocation-padding"
|
|
272
|
+
s.length
|
|
273
|
+
end
|
|
274
|
+
puts r4.length # 20000
|
|
275
|
+
puts r4[0] # 5 (out-0 → "src-0")
|
|
276
|
+
puts r4[19999] # 9 ("src-19999")
|
|
277
|
+
end
|
|
278
|
+
t_gc_root_map_accumulator
|
|
279
|
+
|
|
280
|
+
# === gc_root_range_and_times_map ===
|
|
281
|
+
def t_gc_root_range_and_times_map
|
|
282
|
+
# `Range#map` and `N.times.map` build a fresh accumulator
|
|
283
|
+
# (IntArray / StrArray / FloatArray) and push each block result.
|
|
284
|
+
# When the block allocates inside (e.g. string interpolation), a
|
|
285
|
+
# GC pass triggered mid-loop frees the unrooted accumulator and
|
|
286
|
+
# the next push corrupts malloc bookkeeping — typically surfaces
|
|
287
|
+
# as a SIGSEGV in `_int_malloc` on the next allocation.
|
|
288
|
+
#
|
|
289
|
+
# `int_array` / `str_array` recv branches already root the
|
|
290
|
+
# accumulator (PR #198). This covers the missing branches:
|
|
291
|
+
# `Range#map` and `N.times.map`.
|
|
292
|
+
|
|
293
|
+
# (1) Range#map with string-allocating block.
|
|
294
|
+
r1 = (0..3000).map { |i| "padded-string-#{i}-with-some-extra-text" }
|
|
295
|
+
puts r1.length # 3001
|
|
296
|
+
puts r1[0][0, 6] # padded
|
|
297
|
+
puts r1[3000][-3, 3] # ext
|
|
298
|
+
|
|
299
|
+
# (2) Range#map with int block (heap pressure from inner allocations).
|
|
300
|
+
r2 = (0...3000).map do |i|
|
|
301
|
+
_scratch = "scratch-#{i}-discarded-inner-allocation-padding"
|
|
302
|
+
i * 2
|
|
303
|
+
end
|
|
304
|
+
puts r2.length # 3000
|
|
305
|
+
puts r2[0] # 0
|
|
306
|
+
puts r2[2999] # 5998
|
|
307
|
+
|
|
308
|
+
# (3) N.times.map.
|
|
309
|
+
r3 = 3000.times.map { |i| "kept-#{i}-with-extra-padding-text" }
|
|
310
|
+
puts r3.length # 3000
|
|
311
|
+
puts r3[0] # kept-0-with-extra-padding-text
|
|
312
|
+
puts r3[2999][-3, 3] # ext
|
|
313
|
+
|
|
314
|
+
# (4) N.times.map with int block + scratch allocations.
|
|
315
|
+
r4 = 3000.times.map do |i|
|
|
316
|
+
_scratch = "scratch-#{i}-discarded-inner-allocation-padding"
|
|
317
|
+
i + 1
|
|
318
|
+
end
|
|
319
|
+
puts r4.length # 3000
|
|
320
|
+
puts r4[0] # 1
|
|
321
|
+
puts r4[2999] # 3000
|
|
322
|
+
end
|
|
323
|
+
t_gc_root_range_and_times_map
|
|
324
|
+
|
|
325
|
+
# === transpose_gc_root ===
|
|
326
|
+
def t_transpose_gc_root
|
|
327
|
+
# `Array#transpose` codegen creates the result `sp_PtrArray` and
|
|
328
|
+
# inner `sp_IntArray` columns without `SP_GC_ROOT`. With many
|
|
329
|
+
# allocations across the loop, an `sp_gc_collect` triggered by
|
|
330
|
+
# the next column's `sp_IntArray_new()` reclaims the unrooted
|
|
331
|
+
# result PtrArray. The next `sp_PtrArray_push(result, col)`
|
|
332
|
+
# dereferences a freed pointer.
|
|
333
|
+
#
|
|
334
|
+
# Trigger: a transpose of a large array-of-arrays. Optcarrot's
|
|
335
|
+
# `(0..7).map { (0...0x10000).map {...} }.transpose` allocates
|
|
336
|
+
# 8 outer + 65536 × 8 inner ints in close succession.
|
|
337
|
+
|
|
338
|
+
big = (0..7).map { |a| (0..1023).map { |b| a * 1000 + b } }.transpose
|
|
339
|
+
puts big.length # 1024
|
|
340
|
+
puts big[0].length # 8
|
|
341
|
+
puts big[100][3] # 3*1000 + 100 = 3100
|
|
342
|
+
puts big[1023][7] # 7*1000 + 1023 = 8023
|
|
343
|
+
end
|
|
344
|
+
t_transpose_gc_root
|
|
345
|
+
|
|
346
|
+
# === utf8 ===
|
|
347
|
+
def t_utf8
|
|
348
|
+
s = "あいうえお"
|
|
349
|
+
|
|
350
|
+
puts s.length # 5
|
|
351
|
+
puts s.size # 5
|
|
352
|
+
puts s.bytesize # 15
|
|
353
|
+
|
|
354
|
+
puts s.chars.length # 5
|
|
355
|
+
s.chars.each { |c| puts c }
|
|
356
|
+
|
|
357
|
+
puts s.reverse # おえういあ
|
|
358
|
+
|
|
359
|
+
puts s[0] # あ
|
|
360
|
+
puts s[1] # い
|
|
361
|
+
puts s[4] # お
|
|
362
|
+
puts s[-1] # お
|
|
363
|
+
puts s[1, 2] # いう
|
|
364
|
+
puts s[1..3] # いうえ
|
|
365
|
+
puts s.slice(2, 2) # うえ
|
|
366
|
+
|
|
367
|
+
puts "hello#{s}world".index(s) # 5 (char index, not byte)
|
|
368
|
+
puts s.index("う") # 2
|
|
369
|
+
puts "あいあい".rindex("い") # 3
|
|
370
|
+
|
|
371
|
+
puts "あいう".tr("い", "X") # あXう
|
|
372
|
+
puts "ababab".count("a") # 3
|
|
373
|
+
puts "あいあいあ".count("あ") # 3
|
|
374
|
+
puts "あいあいあ".delete("い") # あああ
|
|
375
|
+
puts "ああいいうう".squeeze # あいう
|
|
376
|
+
|
|
377
|
+
puts "あ".ljust(5, "*") # あ****
|
|
378
|
+
puts "あ".rjust(5, "*") # ****あ
|
|
379
|
+
puts "あ".center(5) # _あ__ (with spaces)
|
|
380
|
+
puts "あ".ljust(5).length # 5 (chars, including padding)
|
|
381
|
+
|
|
382
|
+
puts "あ".succ # ぃ
|
|
383
|
+
puts "az".succ # ba
|
|
384
|
+
|
|
385
|
+
puts s.include?("うえ") # true
|
|
386
|
+
puts s.start_with?("あい") # true
|
|
387
|
+
puts s.end_with?("えお") # true
|
|
388
|
+
|
|
389
|
+
# each_char with non-ASCII
|
|
390
|
+
out = ""
|
|
391
|
+
"日本語".each_char { |c| out = out + "[" + c + "]" }
|
|
392
|
+
puts out # [日][本][語]
|
|
393
|
+
|
|
394
|
+
# split on empty separator
|
|
395
|
+
"あいう".split("").each { |c| puts c } # あ\nい\nう
|
|
396
|
+
|
|
397
|
+
# bytes is still byte-based
|
|
398
|
+
puts "あ".bytes.length # 3
|
|
399
|
+
end
|
|
400
|
+
t_utf8
|
|
401
|
+
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
10
|
|
2
|
+
10
|
|
3
|
+
6
|
|
4
|
+
nil
|
|
5
|
+
7
|
|
6
|
+
7
|
|
7
|
+
6
|
|
8
|
+
6
|
|
9
|
+
1
|
|
10
|
+
2
|
|
11
|
+
3
|
|
12
|
+
4
|
|
13
|
+
10
|
|
14
|
+
hello
|
|
15
|
+
world
|
|
16
|
+
20
|
|
17
|
+
1
|
|
18
|
+
2
|
|
19
|
+
3
|
|
20
|
+
20
|
|
21
|
+
40
|
|
22
|
+
2
|
|
23
|
+
4
|
|
24
|
+
6
|
|
25
|
+
20
|
|
26
|
+
40
|
|
27
|
+
60
|
|
28
|
+
3
|
|
29
|
+
4
|
|
30
|
+
alice
|
|
31
|
+
bob
|
|
32
|
+
1=10
|
|
33
|
+
2=20
|
|
34
|
+
3=30
|
|
35
|
+
1-2-3
|
|
36
|
+
10-20-30
|
|
37
|
+
606
|
|
38
|
+
54
|
|
39
|
+
56
|
|
40
|
+
2
|
|
41
|
+
2
|
|
42
|
+
5
|
|
43
|
+
5
|
|
44
|
+
13
|
|
45
|
+
13
|
|
46
|
+
1
|
|
47
|
+
10
|
|
48
|
+
1
|
|
49
|
+
10
|
|
50
|
+
55
|
|
51
|
+
55
|
|
52
|
+
3628800
|
|
53
|
+
55
|
|
54
|
+
20000
|
|
55
|
+
kept-string-value-0
|
|
56
|
+
999
|
|
57
|
+
20000
|
|
58
|
+
0
|
|
59
|
+
39998
|
|
60
|
+
20000
|
|
61
|
+
out-src-0
|
|
62
|
+
999
|
|
63
|
+
20000
|
|
64
|
+
5
|
|
65
|
+
9
|
|
66
|
+
3001
|
|
67
|
+
padded
|
|
68
|
+
ext
|
|
69
|
+
3000
|
|
70
|
+
0
|
|
71
|
+
5998
|
|
72
|
+
3000
|
|
73
|
+
kept-0-with-extra-padding-text
|
|
74
|
+
ext
|
|
75
|
+
3000
|
|
76
|
+
1
|
|
77
|
+
3000
|
|
78
|
+
1024
|
|
79
|
+
8
|
|
80
|
+
3100
|
|
81
|
+
8023
|
|
82
|
+
5
|
|
83
|
+
5
|
|
84
|
+
15
|
|
85
|
+
5
|
|
86
|
+
あ
|
|
87
|
+
い
|
|
88
|
+
う
|
|
89
|
+
え
|
|
90
|
+
お
|
|
91
|
+
おえういあ
|
|
92
|
+
あ
|
|
93
|
+
い
|
|
94
|
+
お
|
|
95
|
+
お
|
|
96
|
+
いう
|
|
97
|
+
いうえ
|
|
98
|
+
うえ
|
|
99
|
+
5
|
|
100
|
+
2
|
|
101
|
+
3
|
|
102
|
+
あXう
|
|
103
|
+
3
|
|
104
|
+
3
|
|
105
|
+
あああ
|
|
106
|
+
あいう
|
|
107
|
+
あ****
|
|
108
|
+
****あ
|
|
109
|
+
あ
|
|
110
|
+
5
|
|
111
|
+
ぃ
|
|
112
|
+
ba
|
|
113
|
+
true
|
|
114
|
+
true
|
|
115
|
+
true
|
|
116
|
+
[日][本][語]
|
|
117
|
+
あ
|
|
118
|
+
い
|
|
119
|
+
う
|
|
120
|
+
3
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Bundled tests:
|
|
2
|
+
# - poly_array_map
|
|
3
|
+
# - poly_array_push_handlers
|
|
4
|
+
# - poly_hash
|
|
5
|
+
# - primitive_is_a
|
|
6
|
+
|
|
7
|
+
# === poly_array_map ===
|
|
8
|
+
def t_poly_array_map
|
|
9
|
+
# `compile_map_expr` had no `poly_array` recv branch — a
|
|
10
|
+
# heterogeneous-element array (`[1, "two", :three]`) called
|
|
11
|
+
# `.map { ... }` and the dispatch fell through to the `"0"`
|
|
12
|
+
# placeholder. The result was typed as `sp_IntArray *` (per the
|
|
13
|
+
# inferred map result), `lv_out = 0` was emitted, and any
|
|
14
|
+
# `.length` / `[i]` on the accumulator dereferenced NULL,
|
|
15
|
+
# crashing at runtime.
|
|
16
|
+
|
|
17
|
+
# (1) poly_array → IntArray (int-return block).
|
|
18
|
+
arr = [1, "two", :three, 4.5]
|
|
19
|
+
out = arr.map { |x| x.to_s.length }
|
|
20
|
+
puts out.length # 4
|
|
21
|
+
puts out[0] # 1
|
|
22
|
+
puts out[1] # 3
|
|
23
|
+
puts out[2] # 5
|
|
24
|
+
puts out[3] # 3
|
|
25
|
+
|
|
26
|
+
# (2) poly_array → StrArray (string-return block).
|
|
27
|
+
strs = arr.map { |x| x.to_s }
|
|
28
|
+
puts strs.length # 4
|
|
29
|
+
puts strs[0] # 1
|
|
30
|
+
puts strs[1] # two
|
|
31
|
+
puts strs[2] # three
|
|
32
|
+
puts strs[3] # 4.5
|
|
33
|
+
|
|
34
|
+
# (3) poly_array → IntArray (different int expression).
|
|
35
|
+
sizes = arr.map { |x| x.to_s.length * 2 }
|
|
36
|
+
puts sizes.length # 4
|
|
37
|
+
puts sizes[0] # 2
|
|
38
|
+
puts sizes[3] # 6
|
|
39
|
+
end
|
|
40
|
+
t_poly_array_map
|
|
41
|
+
|
|
42
|
+
# === poly_array_push_handlers ===
|
|
43
|
+
def t_poly_array_push_handlers
|
|
44
|
+
# `compile_call_expr` and `compile_mutating_call_stmt` had no `<<`
|
|
45
|
+
# / `push` arms for poly_array recv. The expr-context fall-through
|
|
46
|
+
# produced raw C `<<` on `sp_PolyArray *` (gcc error: "invalid
|
|
47
|
+
# operands to binary <<"); the stmt-context fall-through silently
|
|
48
|
+
# dropped the push from generated C entirely.
|
|
49
|
+
#
|
|
50
|
+
# Repro: a heterogeneous literal lowers to poly_array; then both
|
|
51
|
+
# `arr << v` (expr / stmt-without-receiver-rewrite) and
|
|
52
|
+
# `arr.push(v)` exercise the dispatch.
|
|
53
|
+
|
|
54
|
+
arr = [1, "two", :three]
|
|
55
|
+
arr << 42
|
|
56
|
+
arr.push("four")
|
|
57
|
+
puts arr.length
|
|
58
|
+
puts arr[0]
|
|
59
|
+
puts arr[1]
|
|
60
|
+
puts arr[2]
|
|
61
|
+
puts arr[3]
|
|
62
|
+
puts arr[4]
|
|
63
|
+
end
|
|
64
|
+
t_poly_array_push_handlers
|
|
65
|
+
|
|
66
|
+
# === poly_hash ===
|
|
67
|
+
def t_poly_hash
|
|
68
|
+
# Test heterogeneous Hash
|
|
69
|
+
|
|
70
|
+
h = {name: "Alice", age: 30, active: true}
|
|
71
|
+
puts h[:name] # Alice
|
|
72
|
+
puts h[:age] # 30
|
|
73
|
+
puts h[:active] # true
|
|
74
|
+
puts h.length # 3
|
|
75
|
+
|
|
76
|
+
# Iteration
|
|
77
|
+
h.each do |k, v|
|
|
78
|
+
puts k
|
|
79
|
+
end
|
|
80
|
+
# name, age, active
|
|
81
|
+
|
|
82
|
+
puts "done"
|
|
83
|
+
end
|
|
84
|
+
t_poly_hash
|
|
85
|
+
|
|
86
|
+
# === primitive_is_a ===
|
|
87
|
+
def t_primitive_is_a
|
|
88
|
+
# is_a? / kind_of? / instance_of? on primitive receivers — answer
|
|
89
|
+
# decided at compile time based on Ruby's class hierarchy.
|
|
90
|
+
|
|
91
|
+
# === Integer ===
|
|
92
|
+
p 5.is_a?(Integer)
|
|
93
|
+
p 5.is_a?(Numeric)
|
|
94
|
+
p 5.is_a?(Comparable)
|
|
95
|
+
p 5.is_a?(Object)
|
|
96
|
+
p 5.is_a?(Float)
|
|
97
|
+
p 5.is_a?(String)
|
|
98
|
+
p 5.kind_of?(Integer)
|
|
99
|
+
p 5.kind_of?(Numeric)
|
|
100
|
+
p 5.instance_of?(Integer)
|
|
101
|
+
p 5.instance_of?(Numeric) # false — instance_of? doesn't follow superclass
|
|
102
|
+
|
|
103
|
+
# === Float ===
|
|
104
|
+
p 1.5.is_a?(Float)
|
|
105
|
+
p 1.5.is_a?(Numeric)
|
|
106
|
+
p 1.5.is_a?(Comparable)
|
|
107
|
+
p 1.5.is_a?(Integer)
|
|
108
|
+
p 1.5.kind_of?(Numeric)
|
|
109
|
+
p 1.5.instance_of?(Float)
|
|
110
|
+
p 1.5.instance_of?(Numeric)
|
|
111
|
+
|
|
112
|
+
# === String ===
|
|
113
|
+
p "hi".is_a?(String)
|
|
114
|
+
p "hi".is_a?(Comparable)
|
|
115
|
+
p "hi".is_a?(Object)
|
|
116
|
+
p "hi".is_a?(Integer)
|
|
117
|
+
p "hi".kind_of?(String)
|
|
118
|
+
p "hi".instance_of?(String)
|
|
119
|
+
p "hi".instance_of?(Comparable)
|
|
120
|
+
|
|
121
|
+
# === Symbol ===
|
|
122
|
+
p :hi.is_a?(Symbol)
|
|
123
|
+
p :hi.is_a?(Comparable)
|
|
124
|
+
p :hi.is_a?(String)
|
|
125
|
+
p :hi.kind_of?(Symbol)
|
|
126
|
+
p :hi.instance_of?(Symbol)
|
|
127
|
+
|
|
128
|
+
# === Top-level ancestors (Kernel / BasicObject) ===
|
|
129
|
+
# Every value is in the Object hierarchy, so is_a? returns true for
|
|
130
|
+
# Kernel and BasicObject as well as Object. instance_of? still
|
|
131
|
+
# returns false for these because they're ancestors, not the exact
|
|
132
|
+
# class of the receiver.
|
|
133
|
+
p 5.is_a?(Kernel)
|
|
134
|
+
p 5.is_a?(BasicObject)
|
|
135
|
+
p 1.5.is_a?(Kernel)
|
|
136
|
+
p 1.5.is_a?(BasicObject)
|
|
137
|
+
p "hi".is_a?(Kernel)
|
|
138
|
+
p "hi".is_a?(BasicObject)
|
|
139
|
+
p :hi.is_a?(Kernel)
|
|
140
|
+
p :hi.is_a?(BasicObject)
|
|
141
|
+
p 5.instance_of?(Kernel)
|
|
142
|
+
p 5.instance_of?(BasicObject)
|
|
143
|
+
end
|
|
144
|
+
t_primitive_is_a
|
|
145
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
4
|
|
2
|
+
1
|
|
3
|
+
3
|
|
4
|
+
5
|
|
5
|
+
3
|
|
6
|
+
4
|
|
7
|
+
1
|
|
8
|
+
two
|
|
9
|
+
three
|
|
10
|
+
4.5
|
|
11
|
+
4
|
|
12
|
+
2
|
|
13
|
+
6
|
|
14
|
+
5
|
|
15
|
+
1
|
|
16
|
+
two
|
|
17
|
+
three
|
|
18
|
+
42
|
|
19
|
+
four
|
|
20
|
+
Alice
|
|
21
|
+
30
|
|
22
|
+
true
|
|
23
|
+
3
|
|
24
|
+
name
|
|
25
|
+
age
|
|
26
|
+
active
|
|
27
|
+
done
|
|
28
|
+
true
|
|
29
|
+
true
|
|
30
|
+
true
|
|
31
|
+
true
|
|
32
|
+
false
|
|
33
|
+
false
|
|
34
|
+
true
|
|
35
|
+
true
|
|
36
|
+
true
|
|
37
|
+
false
|
|
38
|
+
true
|
|
39
|
+
true
|
|
40
|
+
true
|
|
41
|
+
false
|
|
42
|
+
true
|
|
43
|
+
true
|
|
44
|
+
false
|
|
45
|
+
true
|
|
46
|
+
true
|
|
47
|
+
true
|
|
48
|
+
false
|
|
49
|
+
true
|
|
50
|
+
true
|
|
51
|
+
false
|
|
52
|
+
true
|
|
53
|
+
true
|
|
54
|
+
false
|
|
55
|
+
true
|
|
56
|
+
true
|
|
57
|
+
true
|
|
58
|
+
true
|
|
59
|
+
true
|
|
60
|
+
true
|
|
61
|
+
true
|
|
62
|
+
true
|
|
63
|
+
true
|
|
64
|
+
true
|
|
65
|
+
false
|
|
66
|
+
false
|