rubyduino 0.2.0 → 0.2.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 +4 -4
- data/.gitmodules +1 -0
- data/CHANGELOG.md +6 -0
- data/README.md +1 -2
- data/lib/rubyduino/sp_runtime.h +9 -0
- data/lib/rubyduino/spinel.rb +1 -1
- data/lib/rubyduino/spinel_arduino_codegen.rb +23 -13
- data/lib/rubyduino/version.rb +1 -1
- data/vendor/spinel/Makefile +463 -54
- data/vendor/spinel/README.md +248 -68
- data/vendor/spinel/benchmark/bm_jekyll_lite.rb +241 -0
- data/vendor/spinel/benchmark/bm_micro_lisp.rb +282 -0
- data/vendor/spinel/benchmark/bm_poly_cells.rb +75 -0
- data/vendor/spinel/benchmark/bm_range_each.rb +15 -0
- data/vendor/spinel/benchmark/bm_sinatra_mini.rb +126 -0
- data/vendor/spinel/compiler_helpers.rb +1506 -0
- data/vendor/spinel/docs/ANALYZE-IR.md +411 -0
- data/vendor/spinel/docs/AST.md +360 -0
- data/vendor/spinel/docs/CLASS-OBJECT.md +521 -0
- data/vendor/spinel/docs/FFI.md +9 -0
- data/vendor/spinel/docs/FLOAT-ROUNDING.md +47 -0
- data/vendor/spinel/docs/HASH-NULLABLE.md +379 -0
- data/vendor/spinel/docs/INCOMPATIBILITIES.md +102 -0
- data/vendor/spinel/docs/RBS-EXTRACT.md +128 -0
- data/vendor/spinel/docs/fast-bootstrap.md +74 -0
- data/vendor/spinel/docs/issue-646-plan.md +159 -0
- data/vendor/spinel/docs/promote-mode-plan.md +227 -0
- data/vendor/spinel/docs/setbyte-semantic-plan.md +203 -0
- data/vendor/spinel/examples/ffi/sqlite/README.md +7 -6
- data/vendor/spinel/examples/ffi/sqlite/sqlite3_lib.rb +7 -4
- data/vendor/spinel/experiments/rbs/box.rb +32 -0
- data/vendor/spinel/experiments/rbs/box.seed +18 -0
- data/vendor/spinel/experiments/rbs/harness.rb +117 -0
- data/vendor/spinel/lib/regexp/re_compile.c +265 -25
- data/vendor/spinel/lib/regexp/re_exec.c +80 -19
- data/vendor/spinel/lib/regexp/re_internal.h +22 -2
- data/vendor/spinel/lib/regexp/re_utf8.c +21 -2
- data/vendor/spinel/lib/sp_bigint.c +67 -3
- data/vendor/spinel/lib/sp_core.c +248 -0
- data/vendor/spinel/lib/sp_core.h +37 -0
- data/vendor/spinel/lib/sp_crypto.c +583 -0
- data/vendor/spinel/lib/sp_crypto.h +79 -0
- data/vendor/spinel/lib/sp_fiber.c +95 -0
- data/vendor/spinel/lib/sp_fiber.h +41 -0
- data/vendor/spinel/lib/sp_gc.c +89 -0
- data/vendor/spinel/lib/sp_gc.h +81 -0
- data/vendor/spinel/lib/sp_io.c +98 -0
- data/vendor/spinel/lib/sp_io.h +31 -0
- data/vendor/spinel/lib/sp_net.c +350 -0
- data/vendor/spinel/lib/sp_net.h +97 -0
- data/vendor/spinel/lib/sp_pack.c +431 -0
- data/vendor/spinel/lib/sp_runtime.h +3485 -341
- data/vendor/spinel/lib/sp_strscan.c +320 -0
- data/vendor/spinel/lib/sp_system.c +173 -0
- data/vendor/spinel/lib/sp_system.h +16 -0
- data/vendor/spinel/lib/sp_time.c +204 -0
- data/vendor/spinel/lib/sp_time.h +63 -0
- data/vendor/spinel/lib/sp_types.h +144 -0
- data/vendor/spinel/lib/stringio.c +31 -3
- data/vendor/spinel/lib/strscan.c +34 -7
- data/vendor/spinel/lib/strscan.rb +6 -53
- data/vendor/spinel/node_table_loader.rb +150 -0
- data/vendor/spinel/spinel +319 -21
- data/vendor/spinel/spinel_analyze.rb +37556 -0
- data/vendor/spinel/spinel_codegen.rb +47620 -33346
- data/vendor/spinel/spinel_parse +0 -0
- data/vendor/spinel/spinel_parse.c +801 -91
- data/vendor/spinel/spinel_rbs_extract.c +931 -0
- data/vendor/spinel/test/alias_attr_reader_source.rb +38 -0
- data/vendor/spinel/test/alias_attr_reader_source.rb.expected +7 -0
- data/vendor/spinel/test/alias_inherited_method.rb +20 -0
- data/vendor/spinel/test/alias_inherited_method.rb.expected +3 -0
- data/vendor/spinel/test/alias_method_dispatch.rb +14 -0
- data/vendor/spinel/test/analyze_fail/attributes_non_symbol.rb +3 -0
- data/vendor/spinel/test/analyze_fail/attributes_non_symbol.stderr.expected +1 -0
- data/vendor/spinel/test/analyze_fail/dynamic_define_method.rb +4 -0
- data/vendor/spinel/test/analyze_fail/dynamic_define_method.stderr.expected +1 -0
- data/vendor/spinel/test/analyze_fail/instance_exec_def_in_block.rb +14 -0
- data/vendor/spinel/test/analyze_fail/instance_exec_def_in_block.stderr.expected +1 -0
- data/vendor/spinel/test/analyze_fail/instance_exec_define_method.rb +15 -0
- data/vendor/spinel/test/analyze_fail/instance_exec_define_method.stderr.expected +1 -0
- data/vendor/spinel/test/analyze_fail/instance_exec_no_block.rb +13 -0
- data/vendor/spinel/test/analyze_fail/instance_exec_no_block.stderr.expected +1 -0
- data/vendor/spinel/test/analyze_fail/nonliteral_define_method_each.rb +7 -0
- data/vendor/spinel/test/analyze_fail/nonliteral_define_method_each.stderr.expected +1 -0
- data/vendor/spinel/test/argv_gc.rb +45 -0
- data/vendor/spinel/test/argv_gc.rb.args +1 -0
- data/vendor/spinel/test/argv_gc.rb.expected +6 -0
- data/vendor/spinel/test/array_at_out_of_bounds.rb +23 -0
- data/vendor/spinel/test/array_at_out_of_bounds.rb.expected +12 -0
- data/vendor/spinel/test/array_clear_expr.rb +26 -0
- data/vendor/spinel/test/array_clear_expr.rb.expected +10 -0
- data/vendor/spinel/test/array_combination_block.rb +11 -0
- data/vendor/spinel/test/array_compact_eq.rb +16 -0
- data/vendor/spinel/test/array_compact_eq.rb.expected +10 -0
- data/vendor/spinel/test/array_fill_poly.rb.expected +1 -0
- data/vendor/spinel/test/array_first_last_empty.rb +12 -0
- data/vendor/spinel/test/array_first_last_empty.rb.expected +8 -0
- data/vendor/spinel/test/array_flatten_typed_elements.rb +19 -0
- data/vendor/spinel/test/array_frozen_mutate_raises.rb +36 -0
- data/vendor/spinel/test/array_frozen_mutate_raises.rb.expected +20 -0
- data/vendor/spinel/test/array_frozen_slice_bang.rb +19 -0
- data/vendor/spinel/test/array_frozen_slice_bang.rb.expected +2 -0
- data/vendor/spinel/test/array_get_oob_negative.rb +22 -0
- data/vendor/spinel/test/array_get_oob_negative.rb.expected +6 -0
- data/vendor/spinel/test/array_grep.rb +12 -0
- data/vendor/spinel/test/array_grep.rb.expected +8 -0
- data/vendor/spinel/test/array_index_int_opt_narrow.rb +30 -0
- data/vendor/spinel/test/array_index_int_opt_narrow.rb.expected +7 -0
- data/vendor/spinel/test/array_map_bang.rb +28 -0
- data/vendor/spinel/test/array_map_bang.rb.expected +7 -0
- data/vendor/spinel/test/array_minmax_block.rb +14 -0
- data/vendor/spinel/test/array_negative_index_too_small.rb +22 -0
- data/vendor/spinel/test/array_negative_index_too_small.rb.expected +5 -0
- data/vendor/spinel/test/array_object_id.rb +12 -0
- data/vendor/spinel/test/array_object_id.rb.expected +6 -0
- data/vendor/spinel/test/array_pack_returns_string.expected +2 -0
- data/vendor/spinel/test/array_pack_returns_string.rb +4 -0
- data/vendor/spinel/test/array_pack_string_unpack.rb +12 -0
- data/vendor/spinel/test/array_pattern_match_basic.rb +27 -0
- data/vendor/spinel/test/array_predicate_no_block.rb +14 -0
- data/vendor/spinel/test/array_predicate_no_block.rb.expected +11 -0
- data/vendor/spinel/test/array_predicate_no_block_param.rb +14 -0
- data/vendor/spinel/test/array_predicate_no_block_param.rb.expected +10 -0
- data/vendor/spinel/test/array_product.rb +5 -0
- data/vendor/spinel/test/array_push_multi_arg.rb +32 -0
- data/vendor/spinel/test/array_push_multi_arg.rb.expected +10 -0
- data/vendor/spinel/test/array_select_bang.rb +34 -0
- data/vendor/spinel/test/array_select_bang.rb.expected +8 -0
- data/vendor/spinel/test/array_slice_before_after.rb +6 -0
- data/vendor/spinel/test/array_slice_when_chunk.rb +7 -0
- data/vendor/spinel/test/array_to_h_sort_bang_block.rb +26 -0
- data/vendor/spinel/test/array_to_h_sort_bang_block.rb.expected +10 -0
- data/vendor/spinel/test/array_transpose_poly_elements.rb +34 -0
- data/vendor/spinel/test/array_transpose_typed_elements.rb +19 -0
- data/vendor/spinel/test/array_unresolved_inspect_no_segv.rb +9 -0
- data/vendor/spinel/test/array_unresolved_inspect_no_segv.rb.expected +2 -0
- data/vendor/spinel/test/at_exit_lifo.rb +6 -0
- data/vendor/spinel/test/at_exit_lifo.rb.expected +4 -0
- data/vendor/spinel/test/back_ref.rb +15 -1
- data/vendor/spinel/test/back_ref.rb.expected +5 -0
- data/vendor/spinel/test/bang_op_ruby_truthy.expected +7 -0
- data/vendor/spinel/test/bang_op_ruby_truthy.rb +10 -0
- data/vendor/spinel/test/bare_arg_in_module_body.rb +29 -0
- data/vendor/spinel/test/bare_sibling_cls_method_call.rb +67 -0
- data/vendor/spinel/test/bare_sibling_cls_method_call.rb.expected +4 -0
- data/vendor/spinel/test/begin_rescue_as_expression.expected +5 -0
- data/vendor/spinel/test/begin_rescue_as_expression.rb +14 -0
- data/vendor/spinel/test/begin_rescue_else_clause.rb +63 -0
- data/vendor/spinel/test/begin_rescue_else_clause.rb.expected +7 -0
- data/vendor/spinel/test/bigint_propagation_chain.rb +33 -0
- data/vendor/spinel/test/bigint_propagation_chain.rb.expected +9 -0
- data/vendor/spinel/test/bigint_volatile_combo.rb +69 -0
- data/vendor/spinel/test/bigint_volatile_combo.rb.expected +18 -0
- data/vendor/spinel/test/block_given_block_param.rb +21 -3
- data/vendor/spinel/test/block_given_block_param.rb.expected +2 -0
- data/vendor/spinel/test/block_given_inline_call_site.expected +2 -0
- data/vendor/spinel/test/block_given_inline_call_site.rb +9 -0
- data/vendor/spinel/test/block_optional_unused.rb +18 -0
- data/vendor/spinel/test/block_optional_unused.rb.expected +4 -0
- data/vendor/spinel/test/block_param_call_block_given.rb +46 -0
- data/vendor/spinel/test/block_param_call_block_given.rb.expected +6 -0
- data/vendor/spinel/test/block_param_call_value_return.rb +32 -0
- data/vendor/spinel/test/block_param_call_value_return.rb.expected +5 -0
- data/vendor/spinel/test/bm_instance_eval.rb +9 -8
- data/vendor/spinel/test/bool_case_equality.rb +10 -0
- data/vendor/spinel/test/bool_logical_operators.rb +9 -0
- data/vendor/spinel/test/bool_logical_operators.rb.expected +8 -0
- data/vendor/spinel/test/builtin_array_method_capture.rb +38 -0
- data/vendor/spinel/test/builtin_array_method_capture.rb.expected +11 -0
- data/vendor/spinel/test/bundle_array_e.rb +250 -0
- data/vendor/spinel/test/bundle_array_e.rb.expected +57 -0
- data/vendor/spinel/test/bundle_array_f.rb +169 -0
- data/vendor/spinel/test/bundle_class_01.rb +43 -0
- data/vendor/spinel/test/bundle_class_01.rb.expected +4 -0
- data/vendor/spinel/test/bundle_class_03.rb +57 -0
- data/vendor/spinel/test/bundle_class_03.rb.expected +6 -0
- data/vendor/spinel/test/bundle_class_05.rb +187 -0
- data/vendor/spinel/test/bundle_class_05.rb.expected +14 -0
- data/vendor/spinel/test/bundle_class_06.rb +201 -0
- data/vendor/spinel/test/bundle_class_06.rb.expected +12 -0
- data/vendor/spinel/test/bundle_class_07.rb +72 -0
- data/vendor/spinel/test/bundle_class_07.rb.expected +6 -0
- data/vendor/spinel/test/bundle_class_08.rb +101 -0
- data/vendor/spinel/test/bundle_class_08.rb.expected +9 -0
- data/vendor/spinel/test/bundle_class_09.rb +171 -0
- data/vendor/spinel/test/bundle_class_09.rb.expected +9 -0
- data/vendor/spinel/test/bundle_class_10.rb +189 -0
- data/vendor/spinel/test/bundle_class_10.rb.expected +5 -0
- data/vendor/spinel/test/bundle_class_11.rb +191 -0
- data/vendor/spinel/test/bundle_class_11.rb.expected +8 -0
- data/vendor/spinel/test/bundle_class_12.rb +234 -0
- data/vendor/spinel/test/bundle_class_12.rb.expected +15 -0
- data/vendor/spinel/test/bundle_class_13.rb +61 -0
- data/vendor/spinel/test/bundle_class_13.rb.expected +2 -0
- data/vendor/spinel/test/bundle_class_14.rb +162 -0
- data/vendor/spinel/test/bundle_class_14.rb.expected +10 -0
- data/vendor/spinel/test/bundle_class_15.rb +184 -0
- data/vendor/spinel/test/bundle_class_15.rb.expected +8 -0
- data/vendor/spinel/test/bundle_class_18.rb +101 -0
- data/vendor/spinel/test/bundle_class_18.rb.expected +13 -0
- data/vendor/spinel/test/bundle_class_19.rb +67 -0
- data/vendor/spinel/test/bundle_class_19.rb.expected +8 -0
- data/vendor/spinel/test/bundle_class_20.rb +122 -0
- data/vendor/spinel/test/bundle_class_20.rb.expected +6 -0
- data/vendor/spinel/test/bundle_class_21.rb +208 -0
- data/vendor/spinel/test/bundle_class_21.rb.expected +27 -0
- data/vendor/spinel/test/bundle_class_22.rb +218 -0
- data/vendor/spinel/test/bundle_class_22.rb.expected +23 -0
- data/vendor/spinel/test/bundle_class_23.rb +187 -0
- data/vendor/spinel/test/bundle_class_23.rb.expected +19 -0
- data/vendor/spinel/test/bundle_class_a.rb +111 -0
- data/vendor/spinel/test/bundle_class_a.rb.expected +14 -0
- data/vendor/spinel/test/bundle_classd_04.rb +149 -0
- data/vendor/spinel/test/bundle_classd_04.rb.expected +15 -0
- data/vendor/spinel/test/bundle_classd_05.rb +65 -0
- data/vendor/spinel/test/bundle_classd_05.rb.expected +15 -0
- data/vendor/spinel/test/bundle_classd_08.rb +44 -0
- data/vendor/spinel/test/bundle_classd_08.rb.expected +4 -0
- data/vendor/spinel/test/bundle_classd_09.rb +221 -0
- data/vendor/spinel/test/bundle_classd_09.rb.expected +16 -0
- data/vendor/spinel/test/bundle_classd_10.rb +77 -0
- data/vendor/spinel/test/bundle_classd_10.rb.expected +10 -0
- data/vendor/spinel/test/bundle_classd_11.rb +89 -0
- data/vendor/spinel/test/bundle_classd_11.rb.expected +6 -0
- data/vendor/spinel/test/bundle_classd_12.rb +211 -0
- data/vendor/spinel/test/bundle_classd_12.rb.expected +19 -0
- data/vendor/spinel/test/bundle_classd_13.rb +246 -0
- data/vendor/spinel/test/bundle_classd_13.rb.expected +20 -0
- data/vendor/spinel/test/bundle_classd_14.rb +72 -0
- data/vendor/spinel/test/bundle_classd_14.rb.expected +10 -0
- data/vendor/spinel/test/bundle_classd_17.rb +206 -0
- data/vendor/spinel/test/bundle_classd_17.rb.expected +17 -0
- data/vendor/spinel/test/bundle_classd_18.rb +89 -0
- data/vendor/spinel/test/bundle_classd_18.rb.expected +3 -0
- data/vendor/spinel/test/bundle_classd_19.rb +134 -0
- data/vendor/spinel/test/bundle_classd_19.rb.expected +23 -0
- data/vendor/spinel/test/bundle_classd_26.rb +103 -0
- data/vendor/spinel/test/bundle_classd_26.rb.expected +7 -0
- data/vendor/spinel/test/bundle_classd_27.rb +241 -0
- data/vendor/spinel/test/bundle_classd_27.rb.expected +15 -0
- data/vendor/spinel/test/bundle_classd_28.rb +80 -0
- data/vendor/spinel/test/bundle_classd_28.rb.expected +10 -0
- data/vendor/spinel/test/bundle_classd_32.rb +63 -0
- data/vendor/spinel/test/bundle_classd_32.rb.expected +7 -0
- data/vendor/spinel/test/bundle_classd_33.rb +117 -0
- data/vendor/spinel/test/bundle_classd_33.rb.expected +17 -0
- data/vendor/spinel/test/bundle_classd_35.rb +90 -0
- data/vendor/spinel/test/bundle_classd_35.rb.expected +5 -0
- data/vendor/spinel/test/bundle_classd_36.rb +97 -0
- data/vendor/spinel/test/bundle_classd_36.rb.expected +5 -0
- data/vendor/spinel/test/bundle_classd_38.rb +50 -0
- data/vendor/spinel/test/bundle_classd_38.rb.expected +7 -0
- data/vendor/spinel/test/bundle_classd_39.rb +76 -0
- data/vendor/spinel/test/bundle_classd_39.rb.expected +15 -0
- data/vendor/spinel/test/bundle_classd_43.rb +84 -0
- data/vendor/spinel/test/bundle_classd_43.rb.expected +7 -0
- data/vendor/spinel/test/bundle_classd_45.rb +115 -0
- data/vendor/spinel/test/bundle_classd_45.rb.expected +7 -0
- data/vendor/spinel/test/bundle_classd_46.rb +72 -0
- data/vendor/spinel/test/bundle_classd_46.rb.expected +5 -0
- data/vendor/spinel/test/bundle_classd_48.rb +85 -0
- data/vendor/spinel/test/bundle_classd_49.rb +153 -0
- data/vendor/spinel/test/bundle_classd_50.rb +200 -0
- data/vendor/spinel/test/bundle_classd_50.rb.expected +10 -0
- data/vendor/spinel/test/bundle_classd_51.rb +191 -0
- data/vendor/spinel/test/bundle_classd_51.rb.expected +12 -0
- data/vendor/spinel/test/bundle_file_a.rb +119 -0
- data/vendor/spinel/test/bundle_file_a.rb.expected +23 -0
- data/vendor/spinel/test/bundle_hash_b1.rb +99 -0
- data/vendor/spinel/test/bundle_hash_b2.rb +107 -0
- data/vendor/spinel/test/bundle_int_a.rb +104 -0
- data/vendor/spinel/test/bundle_int_a.rb.expected +23 -0
- data/vendor/spinel/test/bundle_misc_c_08.rb +170 -0
- data/vendor/spinel/test/bundle_misc_c_08.rb.expected +33 -0
- data/vendor/spinel/test/bundle_misc_c_09.rb +72 -0
- data/vendor/spinel/test/bundle_misc_c_09.rb.expected +6 -0
- data/vendor/spinel/test/bundle_misc_c_10.rb +73 -0
- data/vendor/spinel/test/bundle_misc_c_10.rb.expected +8 -0
- data/vendor/spinel/test/bundle_misc_c_17.rb +124 -0
- data/vendor/spinel/test/bundle_misc_c_17.rb.expected +18 -0
- data/vendor/spinel/test/bundle_misc_c_23.rb +97 -0
- data/vendor/spinel/test/bundle_misc_c_23.rb.expected +10 -0
- data/vendor/spinel/test/bundle_misc_c_26.rb +107 -0
- data/vendor/spinel/test/bundle_misc_c_26.rb.expected +24 -0
- data/vendor/spinel/test/bundle_misc_c_30.rb +94 -0
- data/vendor/spinel/test/bundle_misc_c_31.rb +89 -0
- data/vendor/spinel/test/bundle_misc_c_31.rb.expected +14 -0
- data/vendor/spinel/test/bundle_misc_c_33.rb +163 -0
- data/vendor/spinel/test/bundle_misc_c_33.rb.expected +53 -0
- data/vendor/spinel/test/bundle_misc_c_34.rb +106 -0
- data/vendor/spinel/test/bundle_misc_c_34.rb.expected +11 -0
- data/vendor/spinel/test/bundle_misc_c_35.rb +143 -0
- data/vendor/spinel/test/bundle_misc_c_35.rb.expected +44 -0
- data/vendor/spinel/test/bundle_misc_c_36.rb +165 -0
- data/vendor/spinel/test/bundle_misc_c_36.rb.expected +59 -0
- data/vendor/spinel/test/bundle_misc_c_37.rb +119 -0
- data/vendor/spinel/test/bundle_misc_c_37.rb.expected +22 -0
- data/vendor/spinel/test/bundle_poly_b1.rb +44 -0
- data/vendor/spinel/test/bundle_poly_b1.rb.expected +7 -0
- data/vendor/spinel/test/bundle_string_c.rb +250 -0
- data/vendor/spinel/test/bundle_string_c.rb.expected +51 -0
- data/vendor/spinel/test/bundle_sym.rb +2 -4
- data/vendor/spinel/test/bundle_tiny_array.rb +160 -0
- data/vendor/spinel/test/bundle_tiny_array.rb.expected +53 -0
- data/vendor/spinel/test/bundle_tiny_misc.rb +187 -0
- data/vendor/spinel/test/bundle_tiny_misc.rb.expected +59 -0
- data/vendor/spinel/test/bundle_tiny_num.rb +87 -0
- data/vendor/spinel/test/bundle_tiny_num.rb.expected +27 -0
- data/vendor/spinel/test/bundle_tiny_string.rb +226 -0
- data/vendor/spinel/test/bundle_tiny_string.rb.expected +78 -0
- data/vendor/spinel/test/captured_block_call_value.rb +45 -0
- data/vendor/spinel/test/captured_block_call_value.rb.expected +5 -0
- data/vendor/spinel/test/case_fallthrough_returns_nil.expected +5 -0
- data/vendor/spinel/test/case_fallthrough_returns_nil.rb +8 -0
- data/vendor/spinel/test/case_in_no_match_error.rb +54 -0
- data/vendor/spinel/test/case_in_no_match_error.rb.expected +6 -0
- data/vendor/spinel/test/case_local_in_lambda.rb +57 -0
- data/vendor/spinel/test/case_local_in_lambda.rb.expected +5 -0
- data/vendor/spinel/test/case_when_class.rb +28 -66
- data/vendor/spinel/test/case_when_class.rb.expected +5 -5
- data/vendor/spinel/test/case_when_class_scalar_predicate.rb +53 -0
- data/vendor/spinel/test/case_when_class_scalar_predicate.rb.expected +3 -0
- data/vendor/spinel/test/case_when_poly_scrutinee_bound_to_local.rb +36 -0
- data/vendor/spinel/test/case_when_poly_scrutinee_bound_to_local.rb.expected +5 -0
- data/vendor/spinel/test/case_when_qualified_class.rb +47 -0
- data/vendor/spinel/test/case_when_qualified_class.rb.expected +2 -0
- data/vendor/spinel/test/case_when_regex.rb +23 -0
- data/vendor/spinel/test/case_when_regex.rb.expected +3 -0
- data/vendor/spinel/test/chained_aset_on_poly_hash_recv.rb +19 -0
- data/vendor/spinel/test/chained_aset_on_poly_hash_recv.rb.expected +1 -0
- data/vendor/spinel/test/clamp_string_and_range.rb +14 -0
- data/vendor/spinel/test/clamp_string_and_range.rb.expected +8 -0
- data/vendor/spinel/test/class_const_as_value.rb +58 -0
- data/vendor/spinel/test/class_const_as_value.rb.expected +4 -0
- data/vendor/spinel/test/class_hierarchy.rb +41 -0
- data/vendor/spinel/test/class_hierarchy.rb.expected +10 -0
- data/vendor/spinel/test/class_hierarchy_builtin.rb +43 -0
- data/vendor/spinel/test/class_hierarchy_builtin.rb.expected +14 -0
- data/vendor/spinel/test/class_hierarchy_module.rb +55 -0
- data/vendor/spinel/test/class_hierarchy_module.rb.expected +6 -0
- data/vendor/spinel/test/class_in_collection.rb +22 -0
- data/vendor/spinel/test/class_in_collection.rb.expected +10 -0
- data/vendor/spinel/test/class_ivar_in_class_method.rb +66 -0
- data/vendor/spinel/test/class_ivar_in_class_method.rb.expected +11 -0
- data/vendor/spinel/test/class_lt_builtin_parent.rb +13 -0
- data/vendor/spinel/test/class_name_in_cmeth.rb +30 -0
- data/vendor/spinel/test/class_name_in_cmeth.rb.expected +3 -0
- data/vendor/spinel/test/class_of_primitive.rb +14 -0
- data/vendor/spinel/test/class_of_primitive.rb.expected +9 -0
- data/vendor/spinel/test/class_phase2_name_eq.rb +61 -0
- data/vendor/spinel/test/class_phase2_name_eq.rb.expected +15 -0
- data/vendor/spinel/test/class_reopen_replaces_methods.rb +40 -0
- data/vendor/spinel/test/class_reopen_replaces_methods.rb.expected +3 -0
- data/vendor/spinel/test/class_singleton_def.rb +27 -0
- data/vendor/spinel/test/class_singleton_def.rb.expected +4 -0
- data/vendor/spinel/test/class_superclass.rb +15 -0
- data/vendor/spinel/test/class_superclass.rb.expected +3 -0
- data/vendor/spinel/test/class_value_builtin_and_nested.rb +36 -0
- data/vendor/spinel/test/cls_method_specialization_boxer.expected +2 -0
- data/vendor/spinel/test/cls_method_specialization_boxer.rb +47 -0
- data/vendor/spinel/test/cmeth_name_collision_with_kernel.rb +56 -0
- data/vendor/spinel/test/cmeth_name_collision_with_kernel.rb.expected +5 -0
- data/vendor/spinel/test/cmeth_return_nil_or_obj_via_intermediate.rb +89 -0
- data/vendor/spinel/test/cmeth_return_nil_or_obj_via_intermediate.rb.expected +6 -0
- data/vendor/spinel/test/comparable_between_user_type.rb +26 -0
- data/vendor/spinel/test/comparable_between_user_type.rb.expected +10 -0
- data/vendor/spinel/test/compile_time_attribute_singular.rb +12 -0
- data/vendor/spinel/test/compile_time_attribute_singular.rb.expected +2 -0
- data/vendor/spinel/test/compile_time_attribute_wrapped_record.rb +72 -0
- data/vendor/spinel/test/compile_time_attribute_wrapped_record.rb.expected +2 -0
- data/vendor/spinel/test/compile_time_attributes.rb +14 -0
- data/vendor/spinel/test/compile_time_attributes.rb.expected +3 -0
- data/vendor/spinel/test/compile_time_define_method_direct.rb +8 -0
- data/vendor/spinel/test/compile_time_define_method_direct.rb.expected +2 -0
- data/vendor/spinel/test/compile_time_define_method_int.rb +9 -0
- data/vendor/spinel/test/compile_time_define_method_int.rb.expected +2 -0
- data/vendor/spinel/test/compile_time_define_method_predicates.rb +18 -0
- data/vendor/spinel/test/compile_time_define_method_predicates.rb.expected +4 -0
- data/vendor/spinel/test/compile_time_define_method_strings.rb +9 -0
- data/vendor/spinel/test/compile_time_define_method_strings.rb.expected +2 -0
- data/vendor/spinel/test/complex_polar.rb +37 -0
- data/vendor/spinel/test/complex_polar.rb.expected +10 -0
- data/vendor/spinel/test/concat_chain_operand_gc_root.rb +16 -0
- data/vendor/spinel/test/concat_chain_operand_gc_root.rb.expected +4 -0
- data/vendor/spinel/test/concat_print_poly_unbox.rb +115 -0
- data/vendor/spinel/test/concat_print_poly_unbox.rb.expected +9 -0
- data/vendor/spinel/test/const_aliased_class_reopen_include.rb +33 -0
- data/vendor/spinel/test/const_aliased_class_reopen_include.rb.expected +2 -0
- data/vendor/spinel/test/const_compound_assign.rb +34 -0
- data/vendor/spinel/test/const_path_compound_assign.rb +15 -0
- data/vendor/spinel/test/const_path_deep_nesting.rb +30 -0
- data/vendor/spinel/test/const_path_deep_nesting.rb.expected +2 -0
- data/vendor/spinel/test/const_path_unresolved_require.rb +11 -0
- data/vendor/spinel/test/const_path_unresolved_require.rb.expected +2 -0
- data/vendor/spinel/test/const_self_ref_raises_name_error.rb +44 -0
- data/vendor/spinel/test/const_self_ref_raises_name_error.rb.expected +3 -0
- data/vendor/spinel/test/crashers_536.rb +32 -0
- data/vendor/spinel/test/crashers_536.rb.expected +4 -0
- data/vendor/spinel/test/cvar_method_first_assign.rb +6 -0
- data/vendor/spinel/test/data_define.rb +27 -0
- data/vendor/spinel/test/data_define.rb.expected +5 -0
- data/vendor/spinel/test/default_nil_param_with_str_return.rb +30 -0
- data/vendor/spinel/test/default_nil_param_with_str_return.rb.expected +4 -0
- data/vendor/spinel/test/defined_globals_methods.rb +15 -0
- data/vendor/spinel/test/defined_globals_methods.rb.expected +5 -0
- data/vendor/spinel/test/defined_op.rb +17 -0
- data/vendor/spinel/test/defined_op.rb.expected +8 -0
- data/vendor/spinel/test/destructure_typed_ptr_array_return.rb +30 -0
- data/vendor/spinel/test/destructure_typed_ptr_array_return.rb.expected +2 -0
- data/vendor/spinel/test/dir_exist.rb +2 -0
- data/vendor/spinel/test/dir_methods.rb +15 -0
- data/vendor/spinel/test/double_splat_kwargs.rb +26 -0
- data/vendor/spinel/test/double_splat_kwargs.rb.expected +6 -0
- data/vendor/spinel/test/dynamic_class_new.rb +44 -0
- data/vendor/spinel/test/dynamic_class_new.rb.expected +4 -0
- data/vendor/spinel/test/dynamic_is_a.rb +41 -0
- data/vendor/spinel/test/dynamic_is_a.rb.expected +5 -0
- data/vendor/spinel/test/each_cons_block_destructure.rb +10 -0
- data/vendor/spinel/test/each_cons_with_index_map_no_double_gets.rb +21 -0
- data/vendor/spinel/test/each_cons_with_index_map_no_double_gets.rb.expected +3 -0
- data/vendor/spinel/test/each_entry_reverse_each.rb +8 -0
- data/vendor/spinel/test/each_slice_map.rb +7 -0
- data/vendor/spinel/test/empty_array_local_arg_widen.rb +57 -0
- data/vendor/spinel/test/empty_array_local_arg_widen.rb.expected +2 -0
- data/vendor/spinel/test/empty_array_loop_intermediate_push.rb +103 -0
- data/vendor/spinel/test/empty_array_loop_intermediate_push.rb.expected +5 -0
- data/vendor/spinel/test/empty_array_push_container_elem.rb +35 -0
- data/vendor/spinel/test/empty_array_push_ptr.rb +26 -0
- data/vendor/spinel/test/empty_array_push_ptr.rb.expected +3 -0
- data/vendor/spinel/test/empty_hash_arg_param_widen.rb +44 -0
- data/vendor/spinel/test/empty_hash_arg_param_widen.rb.expected +6 -0
- data/vendor/spinel/test/empty_hash_int_int_no_widen.rb +46 -0
- data/vendor/spinel/test/empty_hash_int_int_no_widen.rb.expected +4 -0
- data/vendor/spinel/test/empty_hash_int_int_promote.rb +32 -0
- data/vendor/spinel/test/empty_hash_int_int_promote.rb.expected +8 -0
- data/vendor/spinel/test/empty_int_array_min_max.rb +15 -0
- data/vendor/spinel/test/empty_int_array_min_max.rb.expected +4 -0
- data/vendor/spinel/test/empty_method_returns_nil.rb +8 -0
- data/vendor/spinel/test/empty_method_returns_nil.rb.expected +3 -0
- data/vendor/spinel/test/empty_symbol_literal.rb +23 -0
- data/vendor/spinel/test/empty_symbol_literal.rb.expected +9 -0
- data/vendor/spinel/test/eq_string_vs_int.rb +20 -0
- data/vendor/spinel/test/eq_string_vs_int.rb.expected +9 -0
- data/vendor/spinel/test/exception_backtrace_empty.rb +12 -0
- data/vendor/spinel/test/exception_backtrace_empty.rb.expected +4 -0
- data/vendor/spinel/test/exception_class_new.rb +46 -0
- data/vendor/spinel/test/exception_class_new.rb.expected +10 -0
- data/vendor/spinel/test/exception_namespaced_default_message.rb +28 -0
- data/vendor/spinel/test/exception_namespaced_default_message.rb.expected +4 -0
- data/vendor/spinel/test/exception_object_methods.rb +3 -2
- data/vendor/spinel/test/exception_object_methods.rb.expected +1 -1
- data/vendor/spinel/test/exception_super_interpolated_message.rb +41 -0
- data/vendor/spinel/test/exception_super_interpolated_message.rb.expected +5 -0
- data/vendor/spinel/test/exception_user_subclass.rb +35 -0
- data/vendor/spinel/test/exception_user_subclass.rb.expected +10 -0
- data/vendor/spinel/test/extend_module.rb +30 -0
- data/vendor/spinel/test/extend_module.rb.expected +4 -0
- data/vendor/spinel/test/ffi_array_specs_decl.rb +25 -0
- data/vendor/spinel/test/ffi_int_arg_poly_value.rb +27 -0
- data/vendor/spinel/test/ffi_ptr_array.rb +35 -0
- data/vendor/spinel/test/ffi_ptr_int_literal.rb +31 -0
- data/vendor/spinel/test/ffi_str_arg_poly_value.rb +26 -0
- data/vendor/spinel/test/fiber_capture_no_leak_to_sibling.rb +27 -0
- data/vendor/spinel/test/fiber_capture_no_leak_to_sibling.rb.expected +1 -0
- data/vendor/spinel/test/fiber_gc_root_isolation.rb +76 -0
- data/vendor/spinel/test/file_dir_methods.rb +11 -0
- data/vendor/spinel/test/file_dir_methods.rb.expected +8 -0
- data/vendor/spinel/test/file_expand_path.rb +10 -0
- data/vendor/spinel/test/file_expand_path.rb.expected +8 -0
- data/vendor/spinel/test/file_mtime.rb +10 -0
- data/vendor/spinel/test/file_mtime.rb.expected +2 -0
- data/vendor/spinel/test/file_read_count.rb +19 -0
- data/vendor/spinel/test/file_read_count.rb.expected +5 -0
- data/vendor/spinel/test/file_readlines.rb +15 -0
- data/vendor/spinel/test/file_readlines.rb.expected +4 -0
- data/vendor/spinel/test/file_write_at_tail_position.rb +16 -0
- data/vendor/spinel/test/float_array_first_last_nil.rb +20 -0
- data/vendor/spinel/test/float_array_first_last_nil.rb.expected +8 -0
- data/vendor/spinel/test/float_divmod_zerodiv.rb +57 -0
- data/vendor/spinel/test/float_divmod_zerodiv.rb.expected +7 -0
- data/vendor/spinel/test/float_limit_constants.rb +14 -0
- data/vendor/spinel/test/float_round_ndigits_return_type.rb +24 -0
- data/vendor/spinel/test/float_round_ndigits_return_type.rb.expected +14 -0
- data/vendor/spinel/test/float_round_value_based_type.rb +17 -0
- data/vendor/spinel/test/float_round_value_based_type.rb.expected +14 -0
- data/vendor/spinel/test/float_round_zero.rb +18 -0
- data/vendor/spinel/test/float_round_zero.rb.expected +11 -0
- data/vendor/spinel/test/float_spaceship.rb +13 -0
- data/vendor/spinel/test/float_step_block.rb +16 -0
- data/vendor/spinel/test/float_step_block.rb.expected +3 -0
- data/vendor/spinel/test/float_step_to_a.rb +20 -0
- data/vendor/spinel/test/float_step_to_a.rb.expected +10 -0
- data/vendor/spinel/test/gc_grandparent_ivar_scan.rb +28 -0
- data/vendor/spinel/test/gc_grandparent_ivar_scan.rb.expected +2 -0
- data/vendor/spinel/test/gc_poly_local_int.rb +11 -0
- data/vendor/spinel/test/gc_poly_local_int.rb.expected +1 -0
- data/vendor/spinel/test/gc_poly_local_root.rb +19 -0
- data/vendor/spinel/test/gc_poly_local_root.rb.expected +1 -0
- data/vendor/spinel/test/gc_poly_local_setjmp.rb +16 -0
- data/vendor/spinel/test/gc_poly_local_setjmp.rb.expected +1 -0
- data/vendor/spinel/test/gc_root_call_args.rb +35 -0
- data/vendor/spinel/test/gc_root_call_args.rb.expected +3 -0
- data/vendor/spinel/test/gc_root_heap_param.rb +21 -0
- data/vendor/spinel/test/gc_root_heap_param.rb.expected +1 -0
- data/vendor/spinel/test/global_multi_assign.rb +28 -0
- data/vendor/spinel/test/global_var_punct.rb +9 -0
- data/vendor/spinel/test/gsub_sub_block.rb +14 -0
- data/vendor/spinel/test/gsub_sub_block.rb.expected +7 -0
- data/vendor/spinel/test/gsub_with_hash_replacement.rb +19 -0
- data/vendor/spinel/test/gsub_with_hash_replacement.rb.expected +3 -0
- data/vendor/spinel/test/hangs_548.rb +66 -0
- data/vendor/spinel/test/hangs_548.rb.expected +4 -0
- data/vendor/spinel/test/hash_block_methods_variants.rb +15 -0
- data/vendor/spinel/test/hash_block_methods_variants.rb.expected +12 -0
- data/vendor/spinel/test/hash_clear.rb +43 -0
- data/vendor/spinel/test/hash_clear.rb.expected +12 -0
- data/vendor/spinel/test/hash_compound_assign_more.rb +21 -0
- data/vendor/spinel/test/hash_delete_if_select_reject_bang.rb +19 -0
- data/vendor/spinel/test/hash_delete_if_select_reject_bang.rb.expected +4 -0
- data/vendor/spinel/test/hash_delete_returns_value.rb +21 -0
- data/vendor/spinel/test/hash_delete_returns_value.rb.expected +8 -0
- data/vendor/spinel/test/hash_dispatch_missing_cells.rb +24 -0
- data/vendor/spinel/test/hash_dispatch_missing_cells.rb.expected +8 -0
- data/vendor/spinel/test/hash_each_key_value.rb +85 -0
- data/vendor/spinel/test/hash_each_key_value.rb.expected +72 -0
- data/vendor/spinel/test/hash_each_with_object.rb +16 -0
- data/vendor/spinel/test/hash_each_with_object.rb.expected +2 -0
- data/vendor/spinel/test/hash_fetch_block.rb +31 -0
- data/vendor/spinel/test/hash_fetch_block.rb.expected +13 -0
- data/vendor/spinel/test/hash_fetch_block_key.rb +9 -0
- data/vendor/spinel/test/hash_fetch_block_key.rb.expected +4 -0
- data/vendor/spinel/test/hash_fetch_block_key_type.rb +37 -0
- data/vendor/spinel/test/hash_fetch_block_key_type.rb.expected +7 -0
- data/vendor/spinel/test/hash_fetch_keyerror.rb +23 -0
- data/vendor/spinel/test/hash_flatten_rassoc_compact.rb +33 -0
- data/vendor/spinel/test/hash_float_value_preserved.rb +27 -0
- data/vendor/spinel/test/hash_float_value_preserved.rb.expected +6 -0
- data/vendor/spinel/test/hash_index_assign_expression.rb +21 -0
- data/vendor/spinel/test/hash_inspect_poly.rb +13 -0
- data/vendor/spinel/test/hash_inspect_poly.rb.expected +6 -0
- data/vendor/spinel/test/hash_int_and_or_assign.rb +30 -0
- data/vendor/spinel/test/hash_int_and_or_assign.rb.expected +8 -0
- data/vendor/spinel/test/hash_invert.rb +16 -0
- data/vendor/spinel/test/hash_invert.rb.expected +4 -0
- data/vendor/spinel/test/hash_key_via_intermediate_local.rb +32 -0
- data/vendor/spinel/test/hash_map_block.rb +6 -0
- data/vendor/spinel/test/hash_merge_with_block.rb +10 -0
- data/vendor/spinel/test/hash_new_default_block_assign.rb +16 -0
- data/vendor/spinel/test/hash_param_each_kv_inference.rb +67 -0
- data/vendor/spinel/test/hash_param_each_kv_inference.rb.expected +3 -0
- data/vendor/spinel/test/hash_param_each_kv_weak_default.rb +75 -0
- data/vendor/spinel/test/hash_param_each_kv_weak_default.rb.expected +6 -0
- data/vendor/spinel/test/hash_param_widen_from_callee_slot.rb +43 -0
- data/vendor/spinel/test/hash_replace_variants.rb +17 -0
- data/vendor/spinel/test/hash_replace_variants.rb.expected +6 -0
- data/vendor/spinel/test/hash_temp_gc_root.rb +26 -0
- data/vendor/spinel/test/hash_transform_keys_cross.rb +12 -0
- data/vendor/spinel/test/hash_transform_keys_cross.rb.expected +5 -0
- data/vendor/spinel/test/hash_value_p.rb +19 -0
- data/vendor/spinel/test/hash_value_p.rb.expected +7 -0
- data/vendor/spinel/test/hash_value_split_widen.rb +22 -0
- data/vendor/spinel/test/hash_value_split_widen.rb.expected +2 -0
- data/vendor/spinel/test/hash_values_at_fetch_values.rb +23 -0
- data/vendor/spinel/test/hash_variant_call_boundary_sym.rb +27 -0
- data/vendor/spinel/test/hash_variant_call_boundary_sym.rb.expected +2 -0
- data/vendor/spinel/test/heterogeneous_tuple_return.rb +32 -0
- data/vendor/spinel/test/heterogeneous_tuple_return.rb.expected +7 -0
- data/vendor/spinel/test/i1006.rb +21 -0
- data/vendor/spinel/test/i1006.rb.expected +7 -0
- data/vendor/spinel/test/i1007.rb +25 -0
- data/vendor/spinel/test/i1007.rb.expected +4 -0
- data/vendor/spinel/test/i1009.rb +9 -0
- data/vendor/spinel/test/i1009.rb.expected +4 -0
- data/vendor/spinel/test/i1011.rb +12 -0
- data/vendor/spinel/test/i1011.rb.expected +2 -0
- data/vendor/spinel/test/i1015.rb +11 -0
- data/vendor/spinel/test/i1015.rb.expected +2 -0
- data/vendor/spinel/test/i1017.rb +37 -0
- data/vendor/spinel/test/i1017.rb.expected +1 -0
- data/vendor/spinel/test/i1020.rb +31 -0
- data/vendor/spinel/test/i1020.rb.expected +2 -0
- data/vendor/spinel/test/i1021.rb +12 -0
- data/vendor/spinel/test/i1021.rb.expected +9 -0
- data/vendor/spinel/test/i1027.rb +28 -0
- data/vendor/spinel/test/i1027.rb.expected +1 -0
- data/vendor/spinel/test/i1031.rb +64 -0
- data/vendor/spinel/test/i1031.rb.expected +4 -0
- data/vendor/spinel/test/i1035.rb +18 -0
- data/vendor/spinel/test/i1035.rb.expected +3 -0
- data/vendor/spinel/test/i1038.rb +7 -0
- data/vendor/spinel/test/i1038.rb.expected +4 -0
- data/vendor/spinel/test/i1041.rb +31 -0
- data/vendor/spinel/test/i1041.rb.expected +4 -0
- data/vendor/spinel/test/i709.rb +41 -0
- data/vendor/spinel/test/i709.rb.expected +3 -0
- data/vendor/spinel/test/i898.rb +23 -0
- data/vendor/spinel/test/i898.rb.expected +7 -0
- data/vendor/spinel/test/i912.rb +15 -0
- data/vendor/spinel/test/i912.rb.expected +8 -0
- data/vendor/spinel/test/i916.rb +14 -0
- data/vendor/spinel/test/i916.rb.expected +4 -0
- data/vendor/spinel/test/i918.rb +45 -0
- data/vendor/spinel/test/i918.rb.expected +13 -0
- data/vendor/spinel/test/i919.rb +12 -0
- data/vendor/spinel/test/i919.rb.expected +5 -0
- data/vendor/spinel/test/i920.rb +9 -0
- data/vendor/spinel/test/i920.rb.expected +4 -0
- data/vendor/spinel/test/i960.rb +13 -0
- data/vendor/spinel/test/i960.rb.expected +5 -0
- data/vendor/spinel/test/i972.rb +38 -0
- data/vendor/spinel/test/i972.rb.expected +11 -0
- data/vendor/spinel/test/i974.rb +23 -0
- data/vendor/spinel/test/i974.rb.expected +19 -0
- data/vendor/spinel/test/i994.rb +18 -0
- data/vendor/spinel/test/i994.rb.expected +9 -0
- data/vendor/spinel/test/i997.rb +20 -0
- data/vendor/spinel/test/i997.rb.expected +6 -0
- data/vendor/spinel/test/if_expr_multi_stmt_body.rb +78 -0
- data/vendor/spinel/test/if_expr_multi_stmt_body.rb.expected +13 -0
- data/vendor/spinel/test/implicit_alloc_site_cache_helper_specialization.rb +112 -0
- data/vendor/spinel/test/implicit_alloc_site_cache_helper_specialization.rb.expected +6 -0
- data/vendor/spinel/test/implicit_alloc_site_escape_layout.rb +30 -0
- data/vendor/spinel/test/implicit_alloc_site_escape_layout.rb.expected +2 -0
- data/vendor/spinel/test/implicit_alloc_site_escape_param.rb +27 -0
- data/vendor/spinel/test/implicit_alloc_site_escape_param.rb.expected +2 -0
- data/vendor/spinel/test/implicit_alloc_site_escape_scoped_locals.rb +44 -0
- data/vendor/spinel/test/implicit_alloc_site_escape_scoped_locals.rb.expected +2 -0
- data/vendor/spinel/test/implicit_alloc_site_holder_poly_array.rb +23 -0
- data/vendor/spinel/test/implicit_alloc_site_holder_poly_array.rb.expected +3 -0
- data/vendor/spinel/test/implicit_alloc_site_holder_shared_method.rb +23 -0
- data/vendor/spinel/test/implicit_alloc_site_holder_shared_method.rb.expected +3 -0
- data/vendor/spinel/test/implicit_alloc_site_holder_specialization.rb +19 -0
- data/vendor/spinel/test/implicit_alloc_site_holder_specialization.rb.expected +3 -0
- data/vendor/spinel/test/implicit_alloc_site_ivar_helper_return_specialization.rb +46 -0
- data/vendor/spinel/test/implicit_alloc_site_ivar_helper_return_specialization.rb.expected +3 -0
- data/vendor/spinel/test/implicit_alloc_site_store_specialization.rb +28 -0
- data/vendor/spinel/test/implicit_alloc_site_store_specialization.rb.expected +4 -0
- data/vendor/spinel/test/implicit_new_local_method_scope.rb +65 -0
- data/vendor/spinel/test/implicit_new_local_method_scope.rb.expected +2 -0
- data/vendor/spinel/test/include_chain_const_lookup.rb +48 -0
- data/vendor/spinel/test/include_chain_const_lookup.rb.expected +3 -0
- data/vendor/spinel/test/include_chain_module_nested_const.rb +62 -0
- data/vendor/spinel/test/include_chain_module_nested_const.rb.expected +2 -0
- data/vendor/spinel/test/include_constant_path.rb +98 -0
- data/vendor/spinel/test/include_constant_path.rb.expected +5 -0
- data/vendor/spinel/test/include_nested_module.rb +99 -0
- data/vendor/spinel/test/include_nested_module.rb.expected +3 -0
- data/vendor/spinel/test/include_skips_module_class_methods.rb +27 -0
- data/vendor/spinel/test/include_skips_module_class_methods.rb.expected +3 -0
- data/vendor/spinel/test/inherited_factory_poly_param_narrow_attr.rb +25 -0
- data/vendor/spinel/test/inherited_kwarg_nil_default_string_ivar.rb +61 -0
- data/vendor/spinel/test/inherited_kwarg_nil_default_string_ivar.rb.expected +2 -0
- data/vendor/spinel/test/inherited_method_kwarg_block_self.rb +67 -0
- data/vendor/spinel/test/inherited_method_kwarg_block_self.rb.expected +2 -0
- data/vendor/spinel/test/initialize_override_param_inference.rb +68 -0
- data/vendor/spinel/test/inject_symbol_op.rb +11 -0
- data/vendor/spinel/test/inject_symbol_op.rb.expected +7 -0
- data/vendor/spinel/test/inject_symbol_to_proc.rb +41 -0
- data/vendor/spinel/test/inject_symbol_to_proc.rb.expected +12 -0
- data/vendor/spinel/test/inlined_yield_block_param_type.rb +32 -0
- data/vendor/spinel/test/inlined_yield_block_param_type.rb.expected +2 -0
- data/vendor/spinel/test/inlined_yield_self_locals.rb +49 -0
- data/vendor/spinel/test/inlined_yield_self_locals.rb.expected +5 -0
- data/vendor/spinel/test/instance_eval_block_params.rb +93 -0
- data/vendor/spinel/test/instance_eval_block_params.rb.expected +10 -0
- data/vendor/spinel/test/instance_eval_trampoline.rb +17 -0
- data/vendor/spinel/test/instance_eval_trampoline.rb.expected +1 -0
- data/vendor/spinel/test/instance_exec_capture.rb +48 -0
- data/vendor/spinel/test/instance_exec_capture.rb.expected +7 -0
- data/vendor/spinel/test/instance_exec_direct.rb +72 -0
- data/vendor/spinel/test/instance_exec_direct.rb.expected +5 -0
- data/vendor/spinel/test/instance_exec_override.rb +69 -0
- data/vendor/spinel/test/instance_exec_override.rb.expected +4 -0
- data/vendor/spinel/test/instance_exec_parity.rb +44 -0
- data/vendor/spinel/test/instance_exec_parity.rb.expected +6 -0
- data/vendor/spinel/test/instance_exec_return.rb +54 -0
- data/vendor/spinel/test/instance_exec_return.rb.expected +7 -0
- data/vendor/spinel/test/instance_exec_trampoline.rb +101 -0
- data/vendor/spinel/test/instance_exec_trampoline.rb.expected +6 -0
- data/vendor/spinel/test/instance_exec_valuetype.rb +48 -0
- data/vendor/spinel/test/instance_exec_valuetype.rb.expected +7 -0
- data/vendor/spinel/test/instance_methods_false.rb +41 -0
- data/vendor/spinel/test/instance_methods_false.rb.expected +14 -0
- data/vendor/spinel/test/int_array_bracket_assign_expr.rb +30 -0
- data/vendor/spinel/test/int_array_bracket_assign_expr.rb.expected +8 -0
- data/vendor/spinel/test/int_array_tally.rb +14 -0
- data/vendor/spinel/test/int_array_tally.rb.expected +8 -0
- data/vendor/spinel/test/int_array_uniq_bang.rb +15 -0
- data/vendor/spinel/test/int_array_uniq_bang.rb.expected +3 -0
- data/vendor/spinel/test/int_ceil_floor_round.rb +11 -0
- data/vendor/spinel/test/int_ceil_floor_round.rb.expected +8 -0
- data/vendor/spinel/test/int_ceil_floor_round_truncate_ndigits.rb +17 -0
- data/vendor/spinel/test/int_ceil_floor_round_truncate_ndigits.rb.expected +12 -0
- data/vendor/spinel/test/int_hash_missing_nil_check.rb +27 -0
- data/vendor/spinel/test/int_hash_missing_nil_check.rb.expected +14 -0
- data/vendor/spinel/test/int_int_hash_literal.rb +13 -0
- data/vendor/spinel/test/int_int_hash_literal.rb.expected +7 -0
- data/vendor/spinel/test/int_int_hash_missing_key_nil.rb +10 -0
- data/vendor/spinel/test/int_int_hash_missing_key_nil.rb.expected +8 -0
- data/vendor/spinel/test/int_opt_p_inspect.rb +8 -0
- data/vendor/spinel/test/int_opt_p_inspect.rb.expected +5 -0
- data/vendor/spinel/test/int_overflow_promote.rb +41 -0
- data/vendor/spinel/test/int_overflow_raises.rb +34 -0
- data/vendor/spinel/test/int_overflow_raises.rb.expected +6 -0
- data/vendor/spinel/test/int_round_large_precision.rb +11 -0
- data/vendor/spinel/test/int_round_large_precision.rb.expected +8 -0
- data/vendor/spinel/test/integer_argument_error.rb +116 -0
- data/vendor/spinel/test/integer_argument_error.rb.expected +36 -0
- data/vendor/spinel/test/integer_extra_methods.rb +12 -0
- data/vendor/spinel/test/integer_extra_methods.rb.expected +8 -0
- data/vendor/spinel/test/integer_pow_negative_exponent.rb +17 -0
- data/vendor/spinel/test/integer_pow_negative_exponent.rb.expected +6 -0
- data/vendor/spinel/test/integer_times_as_expr.rb +9 -0
- data/vendor/spinel/test/integer_times_as_expr.rb.expected +3 -0
- data/vendor/spinel/test/interp_array_container.rb +41 -0
- data/vendor/spinel/test/interp_array_container.rb.expected +8 -0
- data/vendor/spinel/test/interpolation_multistmt.rb +15 -0
- data/vendor/spinel/test/interpolation_multistmt.rb.expected +3 -0
- data/vendor/spinel/test/interpolation_symbol_name.rb +23 -0
- data/vendor/spinel/test/interpolation_symbol_name.rb.expected +6 -0
- data/vendor/spinel/test/introspection_constant_path.rb +60 -0
- data/vendor/spinel/test/introspection_constant_path.rb.expected +13 -0
- data/vendor/spinel/test/io_pipe.rb +6 -0
- data/vendor/spinel/test/io_pipe.rb.expected +3 -0
- data/vendor/spinel/test/is_a_descendant_runtime.rb +59 -0
- data/vendor/spinel/test/is_a_descendant_runtime.rb.expected +11 -0
- data/vendor/spinel/test/is_a_included_module.rb +28 -0
- data/vendor/spinel/test/is_a_included_module.rb.expected +9 -0
- data/vendor/spinel/test/ivar_assign_and_expr.rb +22 -0
- data/vendor/spinel/test/ivar_assign_and_expr.rb.expected +3 -0
- data/vendor/spinel/test/ivar_lazy_init_push_via_inherited_getter.rb +67 -0
- data/vendor/spinel/test/ivar_lazy_init_push_via_inherited_getter.rb.expected +6 -0
- data/vendor/spinel/test/json_generate_basic.rb +16 -0
- data/vendor/spinel/test/json_generate_basic.rb.expected +12 -0
- data/vendor/spinel/test/json_generate_struct_record.rb +9 -0
- data/vendor/spinel/test/json_generate_struct_record.rb.expected +4 -0
- data/vendor/spinel/test/kernel_complex.rb +9 -0
- data/vendor/spinel/test/kernel_dir.rb +9 -0
- data/vendor/spinel/test/kernel_dir.rb.expected +2 -0
- data/vendor/spinel/test/kernel_float_strict.rb +16 -0
- data/vendor/spinel/test/kernel_float_strict.rb.expected +6 -0
- data/vendor/spinel/test/kernel_integer_with_base.rb +16 -0
- data/vendor/spinel/test/kernel_integer_with_base.rb.expected +6 -0
- data/vendor/spinel/test/kwarg_back_propagate_callee_type.rb +26 -0
- data/vendor/spinel/test/kwarg_back_propagate_callee_type.rb.expected +1 -0
- data/vendor/spinel/test/kwargs_double_splat.rb +15 -0
- data/vendor/spinel/test/kwargs_double_splat.rb.expected +2 -0
- data/vendor/spinel/test/kwargs_merge_default_hash.rb +51 -0
- data/vendor/spinel/test/lambda_arrow_string_return.rb +8 -0
- data/vendor/spinel/test/lambda_arrow_string_return.rb.expected +2 -0
- data/vendor/spinel/test/lambda_inference_chain.rb +35 -0
- data/vendor/spinel/test/lambda_inference_chain.rb.expected +5 -0
- data/vendor/spinel/test/local_empty_array_push_promotion_propagates.rb +61 -0
- data/vendor/spinel/test/local_empty_array_push_promotion_propagates.rb.expected +3 -0
- data/vendor/spinel/test/logical_pointer_guard.rb +20 -0
- data/vendor/spinel/test/logical_pointer_guard.rb.expected +2 -0
- data/vendor/spinel/test/logical_value_return.rb +15 -0
- data/vendor/spinel/test/lv_widen_from_callee_arg_slot.rb +56 -0
- data/vendor/spinel/test/lv_widen_from_callee_arg_slot.rb.expected +1 -0
- data/vendor/spinel/test/map_block_string_new_join.rb +33 -0
- data/vendor/spinel/test/map_block_string_new_join.rb.expected +3 -0
- data/vendor/spinel/test/map_obj_array_poly_field.rb +28 -0
- data/vendor/spinel/test/map_recv_emitted_once.rb +44 -0
- data/vendor/spinel/test/map_recv_emitted_once.rb.expected +7 -0
- data/vendor/spinel/test/map_to_heap_objects.rb +16 -0
- data/vendor/spinel/test/map_to_heap_objects.rb.expected +4 -0
- data/vendor/spinel/test/map_to_value_type_objects.rb +26 -0
- data/vendor/spinel/test/map_to_value_type_objects.rb.expected +7 -0
- data/vendor/spinel/test/masgn_classvar_target.rb +13 -0
- data/vendor/spinel/test/masgn_constpath_target.rb +11 -0
- data/vendor/spinel/test/method_level_rescue_return.rb +42 -0
- data/vendor/spinel/test/method_level_rescue_return.rb.expected +6 -0
- data/vendor/spinel/test/method_level_rescue_return_string.rb +39 -0
- data/vendor/spinel/test/method_level_rescue_return_string.rb.expected +6 -0
- data/vendor/spinel/test/method_return_mixed_int_string.rb +65 -0
- data/vendor/spinel/test/method_return_mixed_int_string.rb.expected +10 -0
- data/vendor/spinel/test/middle_splat_param.rb +14 -0
- data/vendor/spinel/test/middle_splat_param.rb.expected +4 -0
- data/vendor/spinel/test/missing_positional_arg_warns.rb +23 -0
- data/vendor/spinel/test/missing_positional_arg_warns.rb.expected +2 -0
- data/vendor/spinel/test/module_accessor_delete_chain.rb +32 -0
- data/vendor/spinel/test/module_accessor_delete_chain.rb.expected +1 -0
- data/vendor/spinel/test/module_accessor_nil_check.rb +40 -0
- data/vendor/spinel/test/module_accessor_nil_check.rb.expected +2 -0
- data/vendor/spinel/test/module_body_string_const_interp.rb +40 -0
- data/vendor/spinel/test/module_body_string_const_interp.rb.expected +5 -0
- data/vendor/spinel/test/module_class_body_side_effects.rb +32 -0
- data/vendor/spinel/test/module_class_body_side_effects.rb.expected +7 -0
- data/vendor/spinel/test/module_class_reflection.rb +27 -0
- data/vendor/spinel/test/module_class_reflection.rb.expected +14 -0
- data/vendor/spinel/test/module_const_defined.rb +13 -0
- data/vendor/spinel/test/module_const_defined.rb.expected +4 -0
- data/vendor/spinel/test/module_cvars.rb +32 -0
- data/vendor/spinel/test/module_cvars.rb.expected +4 -0
- data/vendor/spinel/test/module_def_self_ivar.rb +14 -0
- data/vendor/spinel/test/module_def_self_ivar.rb.expected +2 -0
- data/vendor/spinel/test/module_function_dead_method_dce.rb +29 -0
- data/vendor/spinel/test/module_function_dead_method_dce.rb.expected +2 -0
- data/vendor/spinel/test/module_function_namespace.rb.expected +3 -0
- data/vendor/spinel/test/module_function_str_method_param.rb +14 -0
- data/vendor/spinel/test/module_function_str_method_param.rb.expected +1 -0
- data/vendor/spinel/test/module_ivar_empty_hash_reset.rb +64 -0
- data/vendor/spinel/test/module_ivar_empty_hash_reset.rb.expected +7 -0
- data/vendor/spinel/test/module_ivar_nil_poly.rb +17 -0
- data/vendor/spinel/test/module_ivar_op_write.rb +53 -0
- data/vendor/spinel/test/module_ivar_op_write.rb.expected +3 -0
- data/vendor/spinel/test/module_reopen_after_include_ivar.rb +33 -0
- data/vendor/spinel/test/module_reopen_after_include_ivar.rb.expected +2 -0
- data/vendor/spinel/test/module_reopen_after_include_namespaced.rb +33 -0
- data/vendor/spinel/test/module_reopen_after_include_namespaced.rb.expected +1 -0
- data/vendor/spinel/test/module_reopen_cmeth_redefine.rb +26 -0
- data/vendor/spinel/test/module_reopen_cmeth_redefine.rb.expected +2 -0
- data/vendor/spinel/test/module_singleton_attr_accessor.rb +41 -0
- data/vendor/spinel/test/module_singleton_attr_accessor.rb.expected +4 -0
- data/vendor/spinel/test/module_singleton_new_user_method.rb +23 -0
- data/vendor/spinel/test/module_singleton_new_user_method.rb.expected +2 -0
- data/vendor/spinel/test/module_singleton_self_accessor.rb +31 -0
- data/vendor/spinel/test/module_singleton_self_accessor.rb.expected +4 -0
- data/vendor/spinel/test/more_truthies_nil_compare.rb +31 -0
- data/vendor/spinel/test/more_truthies_nil_compare.rb.expected +9 -0
- data/vendor/spinel/test/multi_arg_lambda.rb +31 -0
- data/vendor/spinel/test/multi_arg_lambda.rb.expected +6 -0
- data/vendor/spinel/test/multi_assign_ivar_type.rb +21 -0
- data/vendor/spinel/test/multi_assign_ivar_type.rb.expected +3 -0
- data/vendor/spinel/test/multi_write_call_rhs_as_expr.rb +31 -0
- data/vendor/spinel/test/multi_write_call_rhs_as_expr.rb.expected +10 -0
- data/vendor/spinel/test/multi_write_scalar_rhs.rb +12 -0
- data/vendor/spinel/test/multi_write_scalar_rhs.rb.expected +5 -0
- data/vendor/spinel/test/mutable_str_alias_uaf.rb +62 -0
- data/vendor/spinel/test/mutable_str_alias_uaf.rb.expected +4 -0
- data/vendor/spinel/test/mutable_str_force_encoding_return.rb +21 -0
- data/vendor/spinel/test/mutable_str_force_encoding_return.rb.expected +1 -0
- data/vendor/spinel/test/mutable_str_into_str_array.rb +46 -0
- data/vendor/spinel/test/mutable_str_into_str_array.rb.expected +7 -0
- data/vendor/spinel/test/mutex_synchronize_block.rb +29 -0
- data/vendor/spinel/test/mutex_synchronize_block.rb.expected +6 -0
- data/vendor/spinel/test/narrow_and_predicate.rb +23 -0
- data/vendor/spinel/test/narrow_and_predicate.rb.expected +1 -0
- data/vendor/spinel/test/negative_range_slice.rb +32 -0
- data/vendor/spinel/test/negative_range_slice.rb.expected +12 -0
- data/vendor/spinel/test/nested_array_eq.rb +22 -0
- data/vendor/spinel/test/nested_array_eq.rb.expected +12 -0
- data/vendor/spinel/test/nested_yield_with_block_param.rb +33 -0
- data/vendor/spinel/test/nil_default_param_widens_to_poly.rb +26 -0
- data/vendor/spinel/test/nil_default_param_widens_to_poly.rb.expected +4 -0
- data/vendor/spinel/test/nil_guard_narrows_int_or_nil.rb +40 -0
- data/vendor/spinel/test/nil_guard_narrows_int_or_nil.rb.expected +5 -0
- data/vendor/spinel/test/not_match_op.rb +8 -0
- data/vendor/spinel/test/not_match_op.rb.expected +4 -0
- data/vendor/spinel/test/nullable_hash_recv_bracket.expected +3 -0
- data/vendor/spinel/test/nullable_hash_recv_bracket.rb +33 -0
- data/vendor/spinel/test/nullable_obj_nil_compare.rb +92 -0
- data/vendor/spinel/test/nullable_obj_nil_compare.rb.expected +8 -0
- data/vendor/spinel/test/nullable_poly_hash_arg_unbox.rb +85 -0
- data/vendor/spinel/test/nullable_poly_hash_arg_unbox.rb.expected +4 -0
- data/vendor/spinel/test/numeric_coerce.rb +24 -0
- data/vendor/spinel/test/numeric_coerce.rb.expected +9 -0
- data/vendor/spinel/test/obj_class_dispatch.rb +69 -0
- data/vendor/spinel/test/obj_class_dispatch.rb.expected +4 -0
- data/vendor/spinel/test/object_id_basic.rb +19 -0
- data/vendor/spinel/test/object_id_basic.rb.expected +8 -0
- data/vendor/spinel/test/object_method_gaps_callee_clone_itself.rb +23 -0
- data/vendor/spinel/test/object_method_gaps_callee_clone_itself.rb.expected +7 -0
- data/vendor/spinel/test/op_assign_user_operator.rb.expected +2 -0
- data/vendor/spinel/test/op_method_bitwise.rb +30 -0
- data/vendor/spinel/test/op_method_bitwise.rb.expected +8 -0
- data/vendor/spinel/test/op_method_shift.rb +30 -0
- data/vendor/spinel/test/op_method_shift.rb.expected +3 -0
- data/vendor/spinel/test/open_class_array_builtin.rb +11 -0
- data/vendor/spinel/test/open_class_array_builtin.rb.expected +1 -0
- data/vendor/spinel/test/open_class_bool_builtin.rb +28 -0
- data/vendor/spinel/test/open_class_bool_builtin.rb.expected +6 -0
- data/vendor/spinel/test/open_class_default_arg.rb +47 -0
- data/vendor/spinel/test/open_class_default_arg.rb.expected +9 -0
- data/vendor/spinel/test/open_class_object.rb +26 -0
- data/vendor/spinel/test/open_class_object.rb.expected +5 -0
- data/vendor/spinel/test/pack_utf8.rb +12 -0
- data/vendor/spinel/test/pack_utf8.rb.expected +10 -0
- data/vendor/spinel/test/param_body_array_hash_inference.rb +58 -0
- data/vendor/spinel/test/param_body_array_hash_inference.rb.expected +3 -0
- data/vendor/spinel/test/param_body_hash_inference.rb +72 -0
- data/vendor/spinel/test/param_body_hash_inference.rb.expected +6 -0
- data/vendor/spinel/test/param_include_body_widen.rb +32 -0
- data/vendor/spinel/test/param_include_body_widen.rb.expected +5 -0
- data/vendor/spinel/test/param_lengthlike_body_widen.rb +53 -0
- data/vendor/spinel/test/param_lengthlike_body_widen.rb.expected +6 -0
- data/vendor/spinel/test/param_ptr_from_callee_slot.rb +42 -0
- data/vendor/spinel/test/param_ptr_from_callee_slot.rb.expected +6 -0
- data/vendor/spinel/test/parser_long_ast_record.rb +132 -0
- data/vendor/spinel/test/parser_long_ast_record.rb.expected +3 -0
- data/vendor/spinel/test/pattern_match_as_and_guard.rb +33 -0
- data/vendor/spinel/test/pattern_match_as_and_guard.rb.expected +4 -0
- data/vendor/spinel/test/pattern_match_splat_rest.rb +15 -0
- data/vendor/spinel/test/pattern_match_splat_rest.rb.expected +4 -0
- data/vendor/spinel/test/pattern_pin.rb +105 -0
- data/vendor/spinel/test/pattern_pin.rb.expected +11 -0
- data/vendor/spinel/test/poly_arg_int_keyed_hash.rb +42 -0
- data/vendor/spinel/test/poly_arg_int_keyed_hash.rb.expected +5 -0
- data/vendor/spinel/test/poly_arg_to_typed_method_param.rb +28 -0
- data/vendor/spinel/test/poly_arg_to_typed_method_param.rb.expected +4 -0
- data/vendor/spinel/test/poly_array_assoc.rb +9 -0
- data/vendor/spinel/test/poly_array_compact.rb +15 -0
- data/vendor/spinel/test/poly_array_compact.rb.expected +3 -0
- data/vendor/spinel/test/poly_array_compact_bang.rb +17 -0
- data/vendor/spinel/test/poly_array_compact_bang.rb.expected +3 -0
- data/vendor/spinel/test/poly_array_dup.rb +52 -0
- data/vendor/spinel/test/poly_array_dup.rb.expected +5 -0
- data/vendor/spinel/test/poly_array_flatten.rb +17 -0
- data/vendor/spinel/test/poly_array_flatten.rb.expected +4 -0
- data/vendor/spinel/test/poly_attr_reader_box_dispatch.expected +1 -0
- data/vendor/spinel/test/poly_attr_reader_box_dispatch.rb +35 -0
- data/vendor/spinel/test/poly_attr_writer.rb +95 -0
- data/vendor/spinel/test/poly_attr_writer.rb.expected +5 -0
- data/vendor/spinel/test/poly_class_dispatch.rb +11 -0
- data/vendor/spinel/test/poly_class_dispatch.rb.expected +7 -0
- data/vendor/spinel/test/poly_dispatch_inherited_attr_reader.rb +20 -0
- data/vendor/spinel/test/poly_dispatch_inherited_attr_reader.rb.expected +2 -0
- data/vendor/spinel/test/poly_dispatch_inherited_method.rb +19 -0
- data/vendor/spinel/test/poly_dispatch_inherited_method.rb.expected +2 -0
- data/vendor/spinel/test/poly_dispatch_multilevel_inheritance.rb +28 -0
- data/vendor/spinel/test/poly_dispatch_multilevel_inheritance.rb.expected +4 -0
- data/vendor/spinel/test/poly_dispatch_narrow_return_type.rb +53 -0
- data/vendor/spinel/test/poly_dispatch_narrow_return_type.rb.expected +3 -0
- data/vendor/spinel/test/poly_each_receiver_gc_root.rb +40 -0
- data/vendor/spinel/test/poly_each_receiver_gc_root.rb.expected +1 -0
- data/vendor/spinel/test/poly_gsub_str_arm.rb +24 -0
- data/vendor/spinel/test/poly_gsub_str_arm.rb.expected +1 -0
- data/vendor/spinel/test/poly_gsub_str_str_hash.rb +37 -0
- data/vendor/spinel/test/poly_gsub_str_str_hash.rb.expected +1 -0
- data/vendor/spinel/test/poly_idx_int_nullable.rb +14 -0
- data/vendor/spinel/test/poly_idx_int_nullable.rb.expected +1 -0
- data/vendor/spinel/test/poly_length_string_tag.rb +20 -0
- data/vendor/spinel/test/poly_length_string_tag.rb.expected +3 -0
- data/vendor/spinel/test/poly_local_is_a_string_narrow_in_non_tail_if.rb +39 -0
- data/vendor/spinel/test/poly_local_is_a_string_narrow_in_non_tail_if.rb.expected +1 -0
- data/vendor/spinel/test/poly_local_is_a_string_narrow_in_tail_if.rb +23 -0
- data/vendor/spinel/test/poly_local_is_a_string_narrow_in_tail_if.rb.expected +1 -0
- data/vendor/spinel/test/poly_local_is_a_string_narrow_in_y1_inline.rb +27 -0
- data/vendor/spinel/test/poly_local_is_a_string_narrow_in_y1_inline.rb.expected +1 -0
- data/vendor/spinel/test/poly_poly_hash_each_value.rb +34 -0
- data/vendor/spinel/test/poly_poly_hash_each_value.rb.expected +11 -0
- data/vendor/spinel/test/poly_poly_hash_fetch_dup.rb +26 -0
- data/vendor/spinel/test/poly_poly_hash_fetch_dup.rb.expected +2 -0
- data/vendor/spinel/test/poly_recv_aset_poly_key.rb +30 -0
- data/vendor/spinel/test/poly_recv_aset_poly_key.rb.expected +1 -0
- data/vendor/spinel/test/poly_recv_dispatch_narrow_module.rb +37 -0
- data/vendor/spinel/test/poly_recv_dispatch_narrow_module.rb.expected +3 -0
- data/vendor/spinel/test/poly_recv_fetch_arm_incompat.rb +37 -0
- data/vendor/spinel/test/poly_recv_fetch_arm_incompat.rb.expected +1 -0
- data/vendor/spinel/test/poly_recv_fetch_hash_arms.rb +31 -0
- data/vendor/spinel/test/poly_recv_fetch_hash_arms.rb.expected +2 -0
- data/vendor/spinel/test/poly_recv_hash_dup.rb +48 -0
- data/vendor/spinel/test/poly_recv_hash_each_dispatch.rb +40 -0
- data/vendor/spinel/test/poly_recv_hash_each_dispatch.rb.expected +5 -0
- data/vendor/spinel/test/poly_recv_map_join.rb +31 -0
- data/vendor/spinel/test/poly_recv_map_join.rb.expected +5 -0
- data/vendor/spinel/test/poly_recv_range_sym_hash_dispatch.rb +55 -0
- data/vendor/spinel/test/poly_recv_range_sym_hash_dispatch.rb.expected +9 -0
- data/vendor/spinel/test/poly_recv_two_arg_slice.rb +27 -0
- data/vendor/spinel/test/poly_value_into_str_str_hash.rb +44 -0
- data/vendor/spinel/test/poly_value_into_str_str_hash.rb.expected +2 -0
- data/vendor/spinel/test/prepend_super_basic.rb +18 -0
- data/vendor/spinel/test/prepend_super_basic.rb.expected +1 -0
- data/vendor/spinel/test/prepend_super_chain.rb +23 -0
- data/vendor/spinel/test/prepend_super_chain.rb.expected +1 -0
- data/vendor/spinel/test/prepend_super_forward.rb +17 -0
- data/vendor/spinel/test/prepend_super_forward.rb.expected +1 -0
- data/vendor/spinel/test/prepend_super_multi.rb +25 -0
- data/vendor/spinel/test/prepend_super_multi.rb.expected +1 -0
- data/vendor/spinel/test/prepend_super_subclass.rb +21 -0
- data/vendor/spinel/test/prepend_super_subclass.rb.expected +1 -0
- data/vendor/spinel/test/primitive_eq_user_class.rb +84 -0
- data/vendor/spinel/test/primitive_eq_user_class.rb.expected +49 -0
- data/vendor/spinel/test/proc_anon_dot_call.rb +50 -0
- data/vendor/spinel/test/proc_anon_dot_call.rb.expected +5 -0
- data/vendor/spinel/test/proc_arg_object.rb +17 -0
- data/vendor/spinel/test/proc_arg_object.rb.expected +1 -0
- data/vendor/spinel/test/proc_call_value_return.rb +20 -0
- data/vendor/spinel/test/proc_call_value_return.rb.expected +5 -0
- data/vendor/spinel/test/proc_introspection.rb +11 -0
- data/vendor/spinel/test/proc_introspection.rb.expected +6 -0
- data/vendor/spinel/test/process_pid.rb +5 -0
- data/vendor/spinel/test/process_pid.rb.expected +2 -0
- data/vendor/spinel/test/ptr_array_to_poly_array_at_call.rb +39 -0
- data/vendor/spinel/test/ptr_array_to_poly_array_at_call.rb.expected +2 -0
- data/vendor/spinel/test/public_send.rb +12 -0
- data/vendor/spinel/test/public_send.rb.expected +4 -0
- data/vendor/spinel/test/puts_class_value.rb +10 -0
- data/vendor/spinel/test/puts_class_value.rb.expected +2 -0
- data/vendor/spinel/test/puts_nil.rb +7 -0
- data/vendor/spinel/test/raise_reraise_in_def.rb +44 -0
- data/vendor/spinel/test/raise_unless_isa_narrow.rb +72 -0
- data/vendor/spinel/test/raise_unless_isa_narrow.rb.expected +3 -0
- data/vendor/spinel/test/range_and_array_range_args.rb +43 -0
- data/vendor/spinel/test/range_and_array_range_args.rb.expected +18 -0
- data/vendor/spinel/test/range_begin_end_polyarr_include_delete_bang.rb +21 -0
- data/vendor/spinel/test/range_bsearch.rb +11 -0
- data/vendor/spinel/test/range_bsearch.rb.expected +8 -0
- data/vendor/spinel/test/range_case_eq_type_mismatch.rb +10 -0
- data/vendor/spinel/test/range_case_eq_type_mismatch.rb.expected +7 -0
- data/vendor/spinel/test/range_each_fusion.rb +109 -0
- data/vendor/spinel/test/range_each_fusion.rb.expected +16 -0
- data/vendor/spinel/test/range_each_no_block.rb +5 -0
- data/vendor/spinel/test/range_equality.rb +9 -0
- data/vendor/spinel/test/range_exclude_end_size.rb +24 -0
- data/vendor/spinel/test/range_exclude_end_size.rb.expected +18 -0
- data/vendor/spinel/test/range_exclusive_nonliteral.rb +34 -0
- data/vendor/spinel/test/range_overlap_array_flatten_depth.rb +14 -0
- data/vendor/spinel/test/range_overlap_array_flatten_depth.rb.expected +8 -0
- data/vendor/spinel/test/range_step.rb +15 -0
- data/vendor/spinel/test/range_step.rb.expected +5 -0
- data/vendor/spinel/test/range_string_cover.rb +10 -0
- data/vendor/spinel/test/rational_complex_literals.rb +27 -0
- data/vendor/spinel/test/rational_complex_literals.rb.expected +12 -0
- data/vendor/spinel/test/rbs/README.md +45 -0
- data/vendor/spinel/test/rbs/arrays.rbs +10 -0
- data/vendor/spinel/test/rbs/arrays.seed.expected +7 -0
- data/vendor/spinel/test/rbs/dropped_members.rbs +13 -0
- data/vendor/spinel/test/rbs/dropped_members.seed.expected +2 -0
- data/vendor/spinel/test/rbs/dropped_sigs.rbs +14 -0
- data/vendor/spinel/test/rbs/dropped_sigs.seed.expected +2 -0
- data/vendor/spinel/test/rbs/dropped_types.rbs +14 -0
- data/vendor/spinel/test/rbs/dropped_types.seed.expected +2 -0
- data/vendor/spinel/test/rbs/hashes.rbs +11 -0
- data/vendor/spinel/test/rbs/hashes.seed.expected +7 -0
- data/vendor/spinel/test/rbs/ivars.rbs +8 -0
- data/vendor/spinel/test/rbs/ivars.seed.expected +5 -0
- data/vendor/spinel/test/rbs/members.rbs +7 -0
- data/vendor/spinel/test/rbs/members.seed.expected +5 -0
- data/vendor/spinel/test/rbs/nominal.rbs +7 -0
- data/vendor/spinel/test/rbs/nominal.seed.expected +3 -0
- data/vendor/spinel/test/rbs/nullable.rbs +8 -0
- data/vendor/spinel/test/rbs/nullable.seed.expected +5 -0
- data/vendor/spinel/test/rbs/overloads.rbs +13 -0
- data/vendor/spinel/test/rbs/overloads.seed.expected +3 -0
- data/vendor/spinel/test/rbs/scalars.rbs +12 -0
- data/vendor/spinel/test/rbs/scalars.seed.expected +9 -0
- data/vendor/spinel/test/rbs/union_poly.rbs +9 -0
- data/vendor/spinel/test/rbs/union_poly.seed.expected +4 -0
- data/vendor/spinel/test/rbs/unqualified.rbs +13 -0
- data/vendor/spinel/test/rbs/unqualified.seed.expected +4 -0
- data/vendor/spinel/test/recursive_block_forward_value.rb +19 -0
- data/vendor/spinel/test/recursive_block_forward_value.rb.expected +3 -0
- data/vendor/spinel/test/recursive_implicit_yield_value.rb +35 -0
- data/vendor/spinel/test/recursive_implicit_yield_value.rb.expected +7 -0
- data/vendor/spinel/test/regex.rb +7 -0
- data/vendor/spinel/test/regex.rb.expected +2 -0
- data/vendor/spinel/test/regex_backref_oob_nil.rb +13 -0
- data/vendor/spinel/test/regex_backref_oob_nil.rb.expected +5 -0
- data/vendor/spinel/test/regex_const_freeze.rb +17 -0
- data/vendor/spinel/test/regex_const_freeze.rb.expected +3 -0
- data/vendor/spinel/test/regex_hex_shorthand.rb +13 -0
- data/vendor/spinel/test/regex_hex_shorthand.rb.expected +12 -0
- data/vendor/spinel/test/regex_match_nonstring.rb +18 -0
- data/vendor/spinel/test/regex_match_nonstring.rb.expected +3 -0
- data/vendor/spinel/test/regex_namespaced_const.rb +17 -0
- data/vendor/spinel/test/regex_namespaced_const.rb.expected +4 -0
- data/vendor/spinel/test/regex_negated_shorthand_toplevel.rb +9 -0
- data/vendor/spinel/test/regex_negated_shorthand_toplevel.rb.expected +13 -0
- data/vendor/spinel/test/regex_sub_backref.rb +11 -0
- data/vendor/spinel/test/regex_unanchored_class_seq.rb +13 -0
- data/vendor/spinel/test/regex_unanchored_class_seq.rb.expected +6 -0
- data/vendor/spinel/test/regexp_capture_ivar_hash.rb +48 -0
- data/vendor/spinel/test/regexp_capture_ivar_hash.rb.expected +7 -0
- data/vendor/spinel/test/regexp_error_catchable.rb +14 -0
- data/vendor/spinel/test/regexp_error_catchable.rb.expected +3 -0
- data/vendor/spinel/test/regexp_gsub_zero_width.rb +27 -0
- data/vendor/spinel/test/regexp_gsub_zero_width.rb.expected +12 -0
- data/vendor/spinel/test/regexp_last_match_capture.rb +21 -0
- data/vendor/spinel/test/regexp_last_match_capture.rb.expected +7 -0
- data/vendor/spinel/test/regexp_line_anchors.rb +34 -0
- data/vendor/spinel/test/regexp_line_anchors.rb.expected +15 -0
- data/vendor/spinel/test/regexp_local_if_else_union.rb +36 -0
- data/vendor/spinel/test/regexp_local_if_else_union.rb.expected +5 -0
- data/vendor/spinel/test/regexp_match_data.rb +17 -0
- data/vendor/spinel/test/regexp_match_data.rb.expected +8 -0
- data/vendor/spinel/test/regexp_match_p_position.rb +7 -0
- data/vendor/spinel/test/regexp_match_p_position.rb.expected +4 -0
- data/vendor/spinel/test/regexp_new_literal.rb +72 -0
- data/vendor/spinel/test/regexp_new_literal.rb.expected +24 -0
- data/vendor/spinel/test/regexp_source_options.rb +10 -0
- data/vendor/spinel/test/regexp_source_options.rb.expected +5 -0
- data/vendor/spinel/test/regexp_sub_gsub_length.rb +17 -0
- data/vendor/spinel/test/regexp_sub_gsub_length.rb.expected +10 -0
- data/vendor/spinel/test/regexp_sub_gsub_realloc.rb +25 -0
- data/vendor/spinel/test/regexp_sub_gsub_realloc.rb.expected +6 -0
- data/vendor/spinel/test/regexp_threeq.rb +15 -0
- data/vendor/spinel/test/regexp_threeq.rb.expected +4 -0
- data/vendor/spinel/test/require_first_line.rb +7 -0
- data/vendor/spinel/test/require_first_line.rb.expected +1 -0
- data/vendor/spinel/test/require_modifier.rb +12 -0
- data/vendor/spinel/test/require_same_line.rb +5 -0
- data/vendor/spinel/test/require_same_line.rb.expected +2 -0
- data/vendor/spinel/test/require_unsupported_lib.rb +8 -0
- data/vendor/spinel/test/require_unsupported_lib.rb.expected +2 -0
- data/vendor/spinel/test/rescue_bind_in_fiber_body.rb +24 -0
- data/vendor/spinel/test/rescue_bind_in_fiber_body.rb.expected +6 -0
- data/vendor/spinel/test/rescue_bind_in_lambda_proc_body.rb +16 -0
- data/vendor/spinel/test/rescue_bind_in_lambda_proc_body.rb.expected +4 -0
- data/vendor/spinel/test/rescue_walks_class_hierarchy.rb +37 -0
- data/vendor/spinel/test/rescue_walks_class_hierarchy.rb.expected +7 -0
- data/vendor/spinel/test/rescue_widens_nil_local_to_exception.expected +1 -0
- data/vendor/spinel/test/rescue_widens_nil_local_to_exception.rb +11 -0
- data/vendor/spinel/test/respond_to_def_self_method.rb +14 -0
- data/vendor/spinel/test/respond_to_module_singleton_accessor.rb +10 -0
- data/vendor/spinel/test/respond_to_module_singleton_accessor.rb.expected +3 -0
- data/vendor/spinel/test/respond_to_primitive.rb +9 -0
- data/vendor/spinel/test/respond_to_primitive.rb.expected +5 -0
- data/vendor/spinel/test/return_unify_int_vs_pointer.rb +37 -0
- data/vendor/spinel/test/return_unify_int_vs_pointer.rb.expected +4 -0
- data/vendor/spinel/test/return_unify_isa_early_return.rb +29 -0
- data/vendor/spinel/test/return_unify_isa_early_return.rb.expected +2 -0
- data/vendor/spinel/test/rightward_assign_destructure.rb +27 -0
- data/vendor/spinel/test/rightward_assign_destructure.rb.expected +8 -0
- data/vendor/spinel/test/safe_navigation_returns_nil.expected +6 -0
- data/vendor/spinel/test/safe_navigation_returns_nil.rb +28 -0
- data/vendor/spinel/test/same_named_attr_no_widen.rb +24 -0
- data/vendor/spinel/test/same_named_attr_no_widen.rb.expected +1 -0
- data/vendor/spinel/test/scan_locals_def_boundary.rb +58 -0
- data/vendor/spinel/test/scan_locals_def_boundary.rb.expected +2 -0
- data/vendor/spinel/test/scan_walkers_def_boundary.rb +52 -0
- data/vendor/spinel/test/scan_walkers_def_boundary.rb.expected +4 -0
- data/vendor/spinel/test/self_class_divergent_returns.rb +61 -0
- data/vendor/spinel/test/self_class_divergent_returns.rb.expected +3 -0
- data/vendor/spinel/test/self_class_new_construction.rb +16 -0
- data/vendor/spinel/test/self_class_new_construction.rb.expected +2 -0
- data/vendor/spinel/test/self_operator_subclass_dispatch.rb +40 -0
- data/vendor/spinel/test/self_operator_subclass_dispatch.rb.expected +2 -0
- data/vendor/spinel/test/signal_trap_stub.rb +30 -0
- data/vendor/spinel/test/signal_trap_stub.rb.expected +3 -0
- data/vendor/spinel/test/sort_min_max_block_comparator.rb +18 -0
- data/vendor/spinel/test/sort_min_max_block_comparator.rb.expected +7 -0
- data/vendor/spinel/test/source_encoding.rb +19 -0
- data/vendor/spinel/test/source_encoding.rb.expected +9 -0
- data/vendor/spinel/test/sp_crypto_basic.rb +45 -0
- data/vendor/spinel/test/sp_crypto_basic.rb.expected +6 -0
- data/vendor/spinel/test/sp_crypto_sha1.rb +18 -0
- data/vendor/spinel/test/sp_crypto_sha1.rb.expected +3 -0
- data/vendor/spinel/test/sp_net_basic.rb +17 -0
- data/vendor/spinel/test/sp_net_basic.rb.expected +2 -0
- data/vendor/spinel/test/splat_heterogeneous_call.rb +14 -0
- data/vendor/spinel/test/splat_params_instance.rb +21 -0
- data/vendor/spinel/test/splat_params_instance.rb.expected +8 -0
- data/vendor/spinel/test/sprintf_long_interp.rb +23 -0
- data/vendor/spinel/test/sprintf_long_interp.rb.expected +3 -0
- data/vendor/spinel/test/stdlib_class_in_ivar.rb +85 -0
- data/vendor/spinel/test/stdlib_class_in_ivar.rb.expected +7 -0
- data/vendor/spinel/test/str_array_max_min_by.rb +6 -0
- data/vendor/spinel/test/str_array_sort_by.rb +11 -0
- data/vendor/spinel/test/str_array_sort_by.rb.expected +5 -0
- data/vendor/spinel/test/str_chomp_paragraph_mode.rb +16 -0
- data/vendor/spinel/test/str_chomp_paragraph_mode.rb.expected +9 -0
- data/vendor/spinel/test/str_count_multi_arg.rb +11 -0
- data/vendor/spinel/test/str_count_multi_arg.rb.expected +4 -0
- data/vendor/spinel/test/str_delete_count_negation.rb +16 -0
- data/vendor/spinel/test/str_delete_count_negation.rb.expected +6 -0
- data/vendor/spinel/test/str_force_encoding_return.rb +26 -0
- data/vendor/spinel/test/str_force_encoding_return.rb.expected +3 -0
- data/vendor/spinel/test/str_int_hash_missing_key_nil.rb +16 -0
- data/vendor/spinel/test/str_int_hash_missing_key_nil.rb.expected +10 -0
- data/vendor/spinel/test/str_match_position.rb +15 -0
- data/vendor/spinel/test/str_match_position.rb.expected +8 -0
- data/vendor/spinel/test/str_method_nil_arg_no_segv.rb +47 -0
- data/vendor/spinel/test/str_method_nil_arg_no_segv.rb.expected +7 -0
- data/vendor/spinel/test/str_oct_prefix.rb +11 -0
- data/vendor/spinel/test/str_oct_prefix.rb.expected +5 -0
- data/vendor/spinel/test/str_ord_empty.rb +11 -0
- data/vendor/spinel/test/str_ord_empty.rb.expected +3 -0
- data/vendor/spinel/test/str_poly_hash_dup_widen.rb +21 -0
- data/vendor/spinel/test/str_poly_hash_dup_widen.rb.expected +4 -0
- data/vendor/spinel/test/str_poly_hash_dup_widen_from_int.rb +17 -0
- data/vendor/spinel/test/str_poly_hash_dup_widen_from_int.rb.expected +3 -0
- data/vendor/spinel/test/str_rindex_position.rb +23 -0
- data/vendor/spinel/test/str_rindex_position.rb.expected +17 -0
- data/vendor/spinel/test/str_split_space_whitespace.rb +10 -0
- data/vendor/spinel/test/str_split_space_whitespace.rb.expected +4 -0
- data/vendor/spinel/test/str_split_trailing_empty.rb +12 -0
- data/vendor/spinel/test/str_split_trailing_empty.rb.expected +7 -0
- data/vendor/spinel/test/str_squeeze_arg.rb +18 -0
- data/vendor/spinel/test/str_squeeze_arg.rb.expected +7 -0
- data/vendor/spinel/test/str_str_hash_nullable_bracket_assign.rb +39 -0
- data/vendor/spinel/test/str_str_hash_nullable_bracket_assign.rb.expected +5 -0
- data/vendor/spinel/test/str_to_i_overflow.rb +32 -0
- data/vendor/spinel/test/str_to_i_overflow.rb.expected +6 -0
- data/vendor/spinel/test/str_tr_negation.rb +10 -0
- data/vendor/spinel/test/str_tr_negation.rb.expected +4 -0
- data/vendor/spinel/test/string_byteslice.rb +9 -0
- data/vendor/spinel/test/string_byteslice.rb.expected +6 -0
- data/vendor/spinel/test/string_casecmp.rb +9 -0
- data/vendor/spinel/test/string_casecmp.rb.expected +7 -0
- data/vendor/spinel/test/string_charset_range_notation.rb +9 -0
- data/vendor/spinel/test/string_charset_range_notation.rb.expected +5 -0
- data/vendor/spinel/test/string_chomp_bang_mutates.rb +20 -0
- data/vendor/spinel/test/string_chomp_bang_mutates.rb.expected +4 -0
- data/vendor/spinel/test/string_crypt.rb +22 -0
- data/vendor/spinel/test/string_crypt.rb.expected +7 -0
- data/vendor/spinel/test/string_delete_prefix_suffix_bang.rb +29 -0
- data/vendor/spinel/test/string_delete_prefix_suffix_bang.rb.expected +5 -0
- data/vendor/spinel/test/string_each_char_returns_self.rb +15 -0
- data/vendor/spinel/test/string_each_line_expr.rb +25 -0
- data/vendor/spinel/test/string_each_line_expr.rb.expected +19 -0
- data/vendor/spinel/test/string_each_line_keeps_newline.rb +15 -0
- data/vendor/spinel/test/string_encoding.rb +8 -0
- data/vendor/spinel/test/string_encoding.rb.expected +5 -0
- data/vendor/spinel/test/string_enum_block_returns_self.rb +27 -0
- data/vendor/spinel/test/string_enum_block_returns_self.rb.expected +11 -0
- data/vendor/spinel/test/string_format_polyarr.rb +6 -0
- data/vendor/spinel/test/string_frozen_mutation_raises.rb +27 -0
- data/vendor/spinel/test/string_frozen_mutation_raises.rb.expected +4 -0
- data/vendor/spinel/test/string_gsub_block.rb +8 -0
- data/vendor/spinel/test/string_index_nil_typeerror.rb +9 -0
- data/vendor/spinel/test/string_index_nil_typeerror.rb.expected +1 -0
- data/vendor/spinel/test/string_index_regex.rb +9 -0
- data/vendor/spinel/test/string_index_regex.rb.expected +6 -0
- data/vendor/spinel/test/string_lshift_int_codepoint.rb +9 -0
- data/vendor/spinel/test/string_lshift_int_codepoint.rb.expected +2 -0
- data/vendor/spinel/test/string_multiply_overflow.rb +14 -0
- data/vendor/spinel/test/string_multiply_overflow.rb.expected +4 -0
- data/vendor/spinel/test/string_nil_arg_typeerror.rb +38 -0
- data/vendor/spinel/test/string_nil_arg_typeerror.rb.expected +5 -0
- data/vendor/spinel/test/string_param_inference_from_body.rb +40 -0
- data/vendor/spinel/test/string_param_inference_from_body.rb.expected +3 -0
- data/vendor/spinel/test/string_partition_regex_and_puts.rb +8 -0
- data/vendor/spinel/test/string_partition_regex_and_puts.rb.expected +6 -0
- data/vendor/spinel/test/string_range_to_a.rb +10 -0
- data/vendor/spinel/test/string_range_to_a.rb.expected +4 -0
- data/vendor/spinel/test/string_replace_prepend_insert_clear.rb +34 -0
- data/vendor/spinel/test/string_rpartition_regex.rb +10 -0
- data/vendor/spinel/test/string_scanner_basic.rb +35 -0
- data/vendor/spinel/test/string_scanner_check_unscan.rb +24 -0
- data/vendor/spinel/test/string_scanner_getch_utf8.rb +26 -0
- data/vendor/spinel/test/string_scanner_nullable.rb +75 -0
- data/vendor/spinel/test/string_scanner_nullable.rb.expected +37 -0
- data/vendor/spinel/test/string_scanner_scan_to_local.rb +11 -0
- data/vendor/spinel/test/string_scanner_unscan_error.rb +54 -0
- data/vendor/spinel/test/string_scrub.rb +7 -0
- data/vendor/spinel/test/string_slice_range.rb +18 -0
- data/vendor/spinel/test/string_split_capture.rb +8 -0
- data/vendor/spinel/test/string_split_inline_arg_gc_root.rb +77 -0
- data/vendor/spinel/test/string_split_inline_arg_gc_root.rb.expected +1 -0
- data/vendor/spinel/test/string_squeeze_no_trailing_nul.rb +12 -0
- data/vendor/spinel/test/string_sub_hash_replacement.rb +8 -0
- data/vendor/spinel/test/string_to_i_base.rb +9 -0
- data/vendor/spinel/test/string_to_i_base.rb.expected +6 -0
- data/vendor/spinel/test/string_to_i_base_zero.rb +9 -0
- data/vendor/spinel/test/string_to_i_overflow_raises.rb +30 -0
- data/vendor/spinel/test/string_to_i_overflow_raises.rb.expected +6 -0
- data/vendor/spinel/test/string_undump.rb +9 -0
- data/vendor/spinel/test/string_upto.rb +20 -0
- data/vendor/spinel/test/string_with_embedded_nul.rb +46 -0
- data/vendor/spinel/test/string_with_embedded_nul.rb.expected +16 -0
- data/vendor/spinel/test/stringio_new_mode.rb +21 -0
- data/vendor/spinel/test/stringio_new_mode.rb.expected +5 -0
- data/vendor/spinel/test/stringio_new_nil.rb +14 -0
- data/vendor/spinel/test/stringio_new_nil.rb.expected +2 -0
- data/vendor/spinel/test/stringio_open.rb +30 -0
- data/vendor/spinel/test/stringio_open.rb.expected +10 -0
- data/vendor/spinel/test/stringio_putc_fsync.rb +24 -0
- data/vendor/spinel/test/stringio_putc_fsync.rb.expected +3 -0
- data/vendor/spinel/test/strip_nul.rb +13 -0
- data/vendor/spinel/test/strip_nul.rb.expected +8 -0
- data/vendor/spinel/test/struct_dig.rb +16 -0
- data/vendor/spinel/test/struct_int_member_unboxed.rb +14 -0
- data/vendor/spinel/test/struct_int_member_unboxed.rb.expected +6 -0
- data/vendor/spinel/test/struct_member_name_no_global_merge.rb +28 -0
- data/vendor/spinel/test/struct_member_name_no_global_merge.rb.expected +3 -0
- data/vendor/spinel/test/struct_to_a_values.rb +12 -0
- data/vendor/spinel/test/struct_to_a_values.rb.expected +6 -0
- data/vendor/spinel/test/struct_to_h.rb +8 -0
- data/vendor/spinel/test/struct_to_h.rb.expected +4 -0
- data/vendor/spinel/test/struct_to_h_block.rb +30 -0
- data/vendor/spinel/test/super_in_non_initialize.rb +44 -0
- data/vendor/spinel/test/super_in_non_initialize.rb.expected +3 -0
- data/vendor/spinel/test/super_with_args.rb +25 -0
- data/vendor/spinel/test/super_with_args.rb.expected +4 -0
- data/vendor/spinel/test/sym_hash_cross_variant_merge.rb +40 -0
- data/vendor/spinel/test/sym_hash_cross_variant_merge.rb.expected +3 -0
- data/vendor/spinel/test/sym_int_hash_merge.rb +52 -0
- data/vendor/spinel/test/sym_int_hash_merge.rb.expected +11 -0
- data/vendor/spinel/test/sym_int_hash_missing_key_nil.rb +15 -0
- data/vendor/spinel/test/sym_int_hash_missing_key_nil.rb.expected +11 -0
- data/vendor/spinel/test/sym_poly_hash_merge_sym_int.rb +18 -0
- data/vendor/spinel/test/sym_poly_hash_merge_sym_int.rb.expected +4 -0
- data/vendor/spinel/test/symbol_id2name_ruby_desc_minmax.rb +13 -0
- data/vendor/spinel/test/symbol_id2name_ruby_desc_minmax.rb.expected +7 -0
- data/vendor/spinel/test/symbol_to_proc_after_positional.rb +18 -0
- data/vendor/spinel/test/symbol_to_proc_after_positional.rb.expected +5 -0
- data/vendor/spinel/test/symbol_upcase_interpolation.rb +24 -0
- data/vendor/spinel/test/symbol_upcase_interpolation.rb.expected +5 -0
- data/vendor/spinel/test/system_argument_list.rb +15 -0
- data/vendor/spinel/test/system_argument_list.rb.expected +7 -0
- data/vendor/spinel/test/thread_new_value.rb +5 -0
- data/vendor/spinel/test/thread_new_value.rb.expected +2 -0
- data/vendor/spinel/test/time_localtime_gmtime.rb +19 -0
- data/vendor/spinel/test/time_mktime_local_utc.rb +24 -0
- data/vendor/spinel/test/time_mktime_local_utc.rb.expected +13 -0
- data/vendor/spinel/test/time_strftime_long_format.rb +21 -0
- data/vendor/spinel/test/time_strftime_long_format.rb.expected +5 -0
- data/vendor/spinel/test/time_subsec_utc.rb +19 -0
- data/vendor/spinel/test/time_subsec_utc.rb.expected +9 -0
- data/vendor/spinel/test/time_to_s.rb +5 -0
- data/vendor/spinel/test/toplevel_include_module_function.rb +101 -0
- data/vendor/spinel/test/toplevel_include_module_function.rb.expected +8 -0
- data/vendor/spinel/test/toplevel_kwrest_block_param.rb +19 -0
- data/vendor/spinel/test/toplevel_kwrest_block_param.rb.expected +2 -0
- data/vendor/spinel/test/tuple_inspect.rb +9 -0
- data/vendor/spinel/test/tuple_inspect.rb.expected +4 -0
- data/vendor/spinel/test/typed_array_empty_returns_nil.rb +19 -0
- data/vendor/spinel/test/typed_array_empty_returns_nil.rb.expected +8 -0
- data/vendor/spinel/test/typed_array_include_cross_type.rb +6 -0
- data/vendor/spinel/test/typed_hash_caller_no_body_widen.rb +46 -0
- data/vendor/spinel/test/typed_hash_caller_no_body_widen.rb.expected +1 -0
- data/vendor/spinel/test/typed_hash_inspect_and_each_value.rb +12 -0
- data/vendor/spinel/test/typed_hash_inspect_and_each_value.rb.expected +6 -0
- data/vendor/spinel/test/typed_hash_missing_returns_nil.rb +17 -0
- data/vendor/spinel/test/typed_hash_missing_returns_nil.rb.expected +4 -0
- data/vendor/spinel/test/unary_operator_methods.rb +19 -0
- data/vendor/spinel/test/unary_operator_methods.rb.expected +3 -0
- data/vendor/spinel/test/undef_method_raises.rb +34 -0
- data/vendor/spinel/test/undef_method_raises.rb.expected +3 -0
- data/vendor/spinel/test/uninit_const_raises_nameerror.rb +18 -0
- data/vendor/spinel/test/uninit_ivar_returns_nil.rb +23 -0
- data/vendor/spinel/test/uninit_ivar_returns_nil.rb.expected +4 -0
- data/vendor/spinel/test/unless_return_path_hash.rb +39 -0
- data/vendor/spinel/test/unless_return_path_hash.rb.expected +6 -0
- data/vendor/spinel/test/user_class_aset_dispatch.rb +75 -0
- data/vendor/spinel/test/user_class_aset_dispatch.rb.expected +3 -0
- data/vendor/spinel/test/value_type_tuple_gc_scan.rb +28 -0
- data/vendor/spinel/test/value_type_tuple_gc_scan.rb.expected +2 -0
- data/vendor/spinel/test/values_at.rb +19 -0
- data/vendor/spinel/test/values_at.rb.expected +4 -0
- data/vendor/spinel/test/volatile_strip_skips_coerced_arg.expected +1 -0
- data/vendor/spinel/test/volatile_strip_skips_coerced_arg.rb +30 -0
- data/vendor/spinel/test/warn_kernel.rb +13 -0
- data/vendor/spinel/test/warn_kernel.rb.expected +3 -0
- data/vendor/spinel/test/warn_unresolved_call_context.rb +20 -0
- data/vendor/spinel/test/when_splat_rational_complex.rb +30 -0
- data/vendor/spinel/test/when_splat_rational_complex.rb.expected +6 -0
- data/vendor/spinel/test/yield_call_assigned_return.rb +41 -0
- data/vendor/spinel/test/yield_call_assigned_return.rb.expected +6 -0
- data/vendor/spinel/test/yield_typed_hash_block_local.rb +41 -0
- data/vendor/spinel/test/yield_typed_hash_block_local.rb.expected +2 -0
- data/vendor/spinel/test/yield_value_return.rb +52 -0
- data/vendor/spinel/test/yield_value_return.rb.expected +8 -0
- data/vendor/spinel/test/yield_value_returns_from_method.expected +6 -0
- data/vendor/spinel/test/yield_value_returns_from_method.rb +27 -0
- data/vendor/spinel/tools/fast-bootstrap +74 -0
- metadata +1325 -279
- data/vendor/spinel/test/alias_method.rb +0 -28
- data/vendor/spinel/test/alias_method.rb.expected +0 -5
- data/vendor/spinel/test/and_node_poly_operand.rb +0 -24
- data/vendor/spinel/test/array_3d_nested.rb +0 -48
- data/vendor/spinel/test/array_clear_typed.rb +0 -40
- data/vendor/spinel/test/array_clear_typed.rb.expected +0 -7
- data/vendor/spinel/test/array_concat.rb +0 -18
- data/vendor/spinel/test/array_concat.rb.expected +0 -2
- data/vendor/spinel/test/array_each_with_object.rb +0 -17
- data/vendor/spinel/test/array_flat_map.rb +0 -16
- data/vendor/spinel/test/array_flat_map.rb.expected +0 -2
- data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb +0 -29
- data/vendor/spinel/test/array_keyed_hash_int_array_eql.rb.expected +0 -6
- data/vendor/spinel/test/array_method_name_clash.rb +0 -15
- data/vendor/spinel/test/array_new_block_typed_container.rb +0 -37
- data/vendor/spinel/test/array_new_block_typed_container.rb.expected +0 -7
- data/vendor/spinel/test/array_new_empty_inner_deferred.rb +0 -47
- data/vendor/spinel/test/array_new_empty_inner_deferred.rb.expected +0 -8
- data/vendor/spinel/test/array_partition_gc.rb +0 -20
- data/vendor/spinel/test/array_partition_gc.rb.expected +0 -3
- data/vendor/spinel/test/array_plus.rb +0 -18
- data/vendor/spinel/test/array_plus.rb.expected +0 -2
- data/vendor/spinel/test/array_rotate_bang.rb +0 -54
- data/vendor/spinel/test/array_rotate_bang.rb.expected +0 -34
- data/vendor/spinel/test/array_shuffle_ptr.rb +0 -11
- data/vendor/spinel/test/attr_writer_poly_box.rb +0 -24
- data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb +0 -29
- data/vendor/spinel/test/attr_writer_poly_no_double_eval.rb.expected +0 -3
- data/vendor/spinel/test/attr_writer_returns_rhs.rb +0 -23
- data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb +0 -38
- data/vendor/spinel/test/auto_unbox_keeps_int_slot.rb.expected +0 -3
- data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb +0 -36
- data/vendor/spinel/test/auto_unbox_poly_to_int_local.rb.expected +0 -2
- data/vendor/spinel/test/bare_return_in_cls_method.rb +0 -46
- data/vendor/spinel/test/bare_return_in_cls_method.rb.expected +0 -2
- data/vendor/spinel/test/bare_return_in_poly_method.rb +0 -26
- data/vendor/spinel/test/bare_return_in_poly_method.rb.expected +0 -2
- data/vendor/spinel/test/bound_method_array.rb +0 -22
- data/vendor/spinel/test/bound_method_array.rb.expected +0 -4
- data/vendor/spinel/test/bound_method_basic.rb +0 -27
- data/vendor/spinel/test/bound_method_basic.rb.expected +0 -2
- data/vendor/spinel/test/call_op_write.rb +0 -51
- data/vendor/spinel/test/call_op_write.rb.expected +0 -11
- data/vendor/spinel/test/chained_attr_setter.rb +0 -55
- data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb +0 -28
- data/vendor/spinel/test/chained_ivar_op_assign_emits_inner_write.rb.expected +0 -3
- data/vendor/spinel/test/chained_ivar_write_split.rb +0 -26
- data/vendor/spinel/test/chained_ivar_write_split.rb.expected +0 -3
- data/vendor/spinel/test/chained_ivar_write_subclass.rb +0 -26
- data/vendor/spinel/test/chained_ivar_write_subclass.rb.expected +0 -2
- data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb +0 -32
- data/vendor/spinel/test/chained_or_assign_collection_array_nested.rb.expected +0 -3
- data/vendor/spinel/test/chained_or_assign_collection_element.rb +0 -29
- data/vendor/spinel/test/chained_or_assign_collection_element.rb.expected +0 -2
- data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb +0 -25
- data/vendor/spinel/test/chained_or_assign_collection_poly_array.rb.expected +0 -3
- data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb +0 -24
- data/vendor/spinel/test/chained_or_assign_collection_str_keys.rb.expected +0 -3
- data/vendor/spinel/test/class_constant_sym_array.rb +0 -19
- data/vendor/spinel/test/class_var_write.rb +0 -19
- data/vendor/spinel/test/cls_ivar_type_parent_defer.rb +0 -32
- data/vendor/spinel/test/cls_method_object.rb +0 -31
- data/vendor/spinel/test/cls_method_object.rb.expected +0 -2
- data/vendor/spinel/test/comparable.rb +0 -21
- data/vendor/spinel/test/comparable.rb.expected +0 -5
- data/vendor/spinel/test/default_argv_narrows_from_string_call_site.rb +0 -32
- data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb +0 -43
- data/vendor/spinel/test/each_poly_recv_block_auto_splat.rb.expected +0 -2
- data/vendor/spinel/test/each_with_object_seed_shadow.rb +0 -14
- data/vendor/spinel/test/each_with_object_seed_shadow.rb.expected +0 -4
- data/vendor/spinel/test/empty_hash_ivar_string_value.rb +0 -51
- data/vendor/spinel/test/empty_hash_ivar_string_value.rb.expected +0 -4
- data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb +0 -19
- data/vendor/spinel/test/ensure_raise_overrides_body_raise.rb.expected +0 -1
- data/vendor/spinel/test/ensure_runs_on_raise.rb +0 -32
- data/vendor/spinel/test/ensure_runs_on_raise.rb.expected +0 -3
- data/vendor/spinel/test/ensure_runs_on_raise_nested.rb +0 -38
- data/vendor/spinel/test/ensure_runs_on_raise_nested.rb.expected +0 -4
- data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb +0 -26
- data/vendor/spinel/test/ensure_runs_on_return_from_rescue.rb.expected +0 -2
- data/vendor/spinel/test/ensure_runs_on_return_nested.rb +0 -37
- data/vendor/spinel/test/ensure_runs_on_return_nested.rb.expected +0 -3
- data/vendor/spinel/test/enumerable.rb +0 -19
- data/vendor/spinel/test/enumerable.rb.expected +0 -2
- data/vendor/spinel/test/exceptions.rb +0 -34
- data/vendor/spinel/test/exceptions.rb.expected +0 -4
- data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb +0 -22
- data/vendor/spinel/test/fiber_ivar_persists_across_yield.rb.expected +0 -3
- data/vendor/spinel/test/fiber_yield_across_method_call.rb +0 -28
- data/vendor/spinel/test/fiber_yield_across_method_call.rb.expected +0 -3
- data/vendor/spinel/test/file_class_methods_int_recv.rb +0 -20
- data/vendor/spinel/test/file_class_methods_int_recv.rb.expected +0 -3
- data/vendor/spinel/test/float_array_sort.rb +0 -18
- data/vendor/spinel/test/float_array_sort.rb.expected +0 -8
- data/vendor/spinel/test/forward_call_class_method_inherited_init.rb +0 -36
- data/vendor/spinel/test/forward_call_class_method_inherited_init.rb.expected +0 -1
- data/vendor/spinel/test/forward_call_class_method_inherited_init_int_array.rb +0 -32
- data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb +0 -41
- data/vendor/spinel/test/forward_call_class_method_inherited_init_obj.rb.expected +0 -1
- data/vendor/spinel/test/forward_call_class_method_int_array.rb +0 -26
- data/vendor/spinel/test/forward_call_class_method_int_array.rb.expected +0 -1
- data/vendor/spinel/test/forward_call_class_method_nested.rb +0 -35
- data/vendor/spinel/test/forward_call_class_method_obj.rb +0 -36
- data/vendor/spinel/test/forward_call_class_method_obj.rb.expected +0 -1
- data/vendor/spinel/test/forward_call_param_type_int_array.rb +0 -34
- data/vendor/spinel/test/forward_call_param_type_int_array.rb.expected +0 -1
- data/vendor/spinel/test/forward_call_param_type_obj.rb +0 -38
- data/vendor/spinel/test/forward_call_param_type_obj.rb.expected +0 -1
- data/vendor/spinel/test/gc_save_double_in_new.rb +0 -13
- data/vendor/spinel/test/gc_save_double_in_new.rb.expected +0 -1
- data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb +0 -54
- data/vendor/spinel/test/gc_scan_skip_inherited_ivar.rb.expected +0 -2
- data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb +0 -46
- data/vendor/spinel/test/heterogeneous_dispatch_int_return_narrow.rb.expected +0 -2
- data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb +0 -50
- data/vendor/spinel/test/if_static_false_skips_dead_branch_compile.rb.expected +0 -3
- data/vendor/spinel/test/implicit_self_param_poly.rb +0 -17
- data/vendor/spinel/test/implicit_self_param_poly.rb.expected +0 -1
- data/vendor/spinel/test/inherit.rb +0 -52
- data/vendor/spinel/test/inherit.rb.expected +0 -7
- data/vendor/spinel/test/inherited_method_param_widen.rb +0 -49
- data/vendor/spinel/test/init_locals.rb +0 -43
- data/vendor/spinel/test/init_locals.rb.expected +0 -3
- data/vendor/spinel/test/initialize_param_poly_call_sites.rb +0 -20
- data/vendor/spinel/test/initialize_param_poly_call_sites.rb.expected +0 -2
- data/vendor/spinel/test/initialize_param_through_call.rb +0 -15
- data/vendor/spinel/test/initialize_void_wrapper_gc_save.rb +0 -40
- data/vendor/spinel/test/int_array_replace_expr.rb +0 -23
- data/vendor/spinel/test/int_array_replace_expr.rb.expected +0 -7
- data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb +0 -25
- data/vendor/spinel/test/intarray_slice_assign_from_intarray_ptr_array_first.rb.expected +0 -1
- data/vendor/spinel/test/integer_div.rb +0 -21
- data/vendor/spinel/test/integer_div.rb.expected +0 -10
- data/vendor/spinel/test/introspect.rb +0 -35
- data/vendor/spinel/test/introspect.rb.expected +0 -11
- data/vendor/spinel/test/issue176_empty_hash_default.rb +0 -34
- data/vendor/spinel/test/issue176_empty_hash_default.rb.expected +0 -3
- data/vendor/spinel/test/issue204_user_find_fetch.rb +0 -25
- data/vendor/spinel/test/issue204_user_find_fetch.rb.expected +0 -5
- data/vendor/spinel/test/issue207_factory_pattern.rb +0 -35
- data/vendor/spinel/test/issue207_factory_pattern.rb.expected +0 -1
- data/vendor/spinel/test/issue207_full_repro.rb +0 -52
- data/vendor/spinel/test/issue207_full_repro.rb.expected +0 -1
- data/vendor/spinel/test/issue208_inherited_class_method.rb +0 -24
- data/vendor/spinel/test/issue208_inherited_class_method.rb.expected +0 -4
- data/vendor/spinel/test/issue219_aref_chain.rb +0 -36
- data/vendor/spinel/test/issue219_aref_chain.rb.expected +0 -5
- data/vendor/spinel/test/issue235_chain_tail_widening.rb +0 -48
- data/vendor/spinel/test/issue235_chain_tail_widening.rb.expected +0 -5
- data/vendor/spinel/test/ivar_and_write_basic.rb +0 -34
- data/vendor/spinel/test/ivar_and_write_basic.rb.expected +0 -5
- data/vendor/spinel/test/ivar_c_keyword.rb +0 -14
- data/vendor/spinel/test/ivar_c_keyword.rb.expected +0 -1
- data/vendor/spinel/test/ivar_float_array.rb +0 -59
- data/vendor/spinel/test/ivar_float_array.rb.expected +0 -11
- data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb +0 -22
- data/vendor/spinel/test/ivar_op_assign_bitwise_and_shift.rb.expected +0 -6
- data/vendor/spinel/test/ivar_or_write_basic.rb +0 -57
- data/vendor/spinel/test/ivar_or_write_basic.rb.expected +0 -9
- data/vendor/spinel/test/ivar_writer_heterogeneity.rb +0 -34
- data/vendor/spinel/test/ivar_writer_heterogeneity.rb.expected +0 -2
- data/vendor/spinel/test/known_constants.rb +0 -25
- data/vendor/spinel/test/known_constants.rb.expected +0 -4
- data/vendor/spinel/test/kw_nil_default_string_call.rb +0 -6
- data/vendor/spinel/test/kw_nil_default_string_call.rb.expected +0 -2
- data/vendor/spinel/test/map_array_block_result.rb +0 -29
- data/vendor/spinel/test/map_array_block_result.rb.expected +0 -2
- data/vendor/spinel/test/map_block_returns_nested_array.rb +0 -53
- data/vendor/spinel/test/map_empty_block.rb +0 -26
- data/vendor/spinel/test/map_empty_block.rb.expected +0 -6
- data/vendor/spinel/test/map_range_recv_array_block.rb +0 -31
- data/vendor/spinel/test/method_param_unify_to_poly.rb +0 -40
- data/vendor/spinel/test/method_param_unify_to_poly.rb.expected +0 -2
- data/vendor/spinel/test/multi_arg_block_call.rb +0 -56
- data/vendor/spinel/test/multi_arg_block_call.rb.expected +0 -5
- data/vendor/spinel/test/multi_assign_ivar.rb +0 -33
- data/vendor/spinel/test/multi_assign_ivar.rb.expected +0 -1
- data/vendor/spinel/test/multi_write_const.rb +0 -36
- data/vendor/spinel/test/multi_write_const.rb.expected +0 -9
- data/vendor/spinel/test/multi_write_from_poly_recv.rb +0 -34
- data/vendor/spinel/test/multi_write_ivar.rb +0 -34
- data/vendor/spinel/test/multi_write_ivar.rb.expected +0 -3
- data/vendor/spinel/test/multi_write_ivar_widening.rb +0 -10
- data/vendor/spinel/test/multi_write_ivar_widening.rb.expected +0 -2
- data/vendor/spinel/test/multi_write_map_block.rb +0 -31
- data/vendor/spinel/test/multi_write_map_block.rb.expected +0 -7
- data/vendor/spinel/test/multi_write_setter.rb +0 -28
- data/vendor/spinel/test/multi_write_setter.rb.expected +0 -3
- data/vendor/spinel/test/multi_write_typed_array_dispatch.rb +0 -44
- data/vendor/spinel/test/multi_write_typed_array_dispatch.rb.expected +0 -3
- data/vendor/spinel/test/nested_class_in_class.rb +0 -38
- data/vendor/spinel/test/nested_class_in_class.rb.expected +0 -3
- data/vendor/spinel/test/no_attr_write_shortcut_complex.rb +0 -33
- data/vendor/spinel/test/no_attr_write_shortcut_complex.rb.expected +0 -3
- data/vendor/spinel/test/no_attr_write_shortcut_multi.rb +0 -38
- data/vendor/spinel/test/no_attr_write_shortcut_multi.rb.expected +0 -4
- data/vendor/spinel/test/no_keywords_param.rb +0 -15
- data/vendor/spinel/test/no_keywords_param.rb.expected +0 -2
- data/vendor/spinel/test/obj_array.rb +0 -26
- data/vendor/spinel/test/obj_array.rb.expected +0 -6
- data/vendor/spinel/test/obj_class_returns_string.rb +0 -24
- data/vendor/spinel/test/obj_class_returns_string.rb.expected +0 -2
- data/vendor/spinel/test/optional_string_param_method.rb +0 -11
- data/vendor/spinel/test/optional_string_param_method.rb.expected +0 -3
- data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb +0 -37
- data/vendor/spinel/test/poly_array_literal_callnode_typed_elem.rb.expected +0 -9
- data/vendor/spinel/test/poly_array_slot_literal.rb +0 -41
- data/vendor/spinel/test/poly_array_slot_sized_default.rb +0 -33
- data/vendor/spinel/test/poly_box_int_array.rb +0 -13
- data/vendor/spinel/test/poly_box_int_array.rb.expected +0 -2
- data/vendor/spinel/test/poly_dispatch_args_ret.rb +0 -45
- data/vendor/spinel/test/poly_dispatch_args_ret.rb.expected +0 -4
- data/vendor/spinel/test/poly_dispatch_arity_padding.rb +0 -36
- data/vendor/spinel/test/poly_dispatch_arity_truncate.rb +0 -45
- data/vendor/spinel/test/poly_hash_literal_from_ivar.rb +0 -47
- data/vendor/spinel/test/poly_hash_literal_from_ivar.rb.expected +0 -5
- data/vendor/spinel/test/poly_int_arith_auto_unify.rb +0 -26
- data/vendor/spinel/test/poly_int_arith_auto_unify.rb.expected +0 -4
- data/vendor/spinel/test/poly_int_bit_index.rb +0 -50
- data/vendor/spinel/test/poly_int_bit_index.rb.expected +0 -14
- data/vendor/spinel/test/poly_or_returns_value.rb +0 -13
- data/vendor/spinel/test/poly_or_returns_value.rb.expected +0 -4
- data/vendor/spinel/test/poly_recv_bracket_assign.rb +0 -31
- data/vendor/spinel/test/poly_recv_bracket_assign.rb.expected +0 -1
- data/vendor/spinel/test/poly_recv_each.rb +0 -35
- data/vendor/spinel/test/poly_recv_each.rb.expected +0 -7
- data/vendor/spinel/test/poly_shl_array_push_dispatch.rb +0 -35
- data/vendor/spinel/test/poly_shl_array_push_dispatch.rb.expected +0 -5
- data/vendor/spinel/test/proc_hash_value.rb +0 -27
- data/vendor/spinel/test/regexp.rb +0 -34
- data/vendor/spinel/test/regexp.rb.expected +0 -12
- data/vendor/spinel/test/reopen_class.rb +0 -33
- data/vendor/spinel/test/reopen_class.rb.expected +0 -5
- data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb +0 -27
- data/vendor/spinel/test/runtime_widen_int_to_poly_array.rb.expected +0 -3
- data/vendor/spinel/test/sample_user_method.rb +0 -20
- data/vendor/spinel/test/scan_ivars_inherited_slot.rb +0 -32
- data/vendor/spinel/test/scan_new_calls_class_scope.rb +0 -35
- data/vendor/spinel/test/send.rb +0 -15
- data/vendor/spinel/test/send.rb.expected +0 -2
- data/vendor/spinel/test/stdlib.rb +0 -28
- data/vendor/spinel/test/stdlib.rb.expected +0 -5
- data/vendor/spinel/test/strip_nullable_int_cast.rb +0 -24
- data/vendor/spinel/test/super_arg_cross_class_cast.rb +0 -39
- data/vendor/spinel/test/super_arg_cross_class_cast.rb.expected +0 -2
- data/vendor/spinel/test/super_forwarding.rb +0 -25
- data/vendor/spinel/test/super_forwarding.rb.expected +0 -3
- data/vendor/spinel/test/sym_case.rb +0 -15
- data/vendor/spinel/test/sym_case.rb.expected +0 -4
- data/vendor/spinel/test/symbol_ivar_reassign.rb +0 -25
- data/vendor/spinel/test/symbol_ivar_reassign.rb.expected +0 -2
- data/vendor/spinel/test/toplevel_ivar_array.rb +0 -19
- data/vendor/spinel/test/toplevel_ivar_array.rb.expected +0 -4
- data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb +0 -20
- data/vendor/spinel/test/unbox_poly_index_in_dispatch.rb.expected +0 -1
- data/vendor/spinel/test/undef.rb +0 -33
- data/vendor/spinel/test/undef.rb.expected +0 -2
- data/vendor/spinel/test/user_method_named_like_mutator.rb +0 -30
- data/vendor/spinel/test/user_method_named_like_mutator.rb.expected +0 -2
- data/vendor/spinel/test/value_type_ctor_gc_save.rb +0 -46
- data/vendor/spinel/test/value_type_ctor_gc_save.rb.expected +0 -3
- data/vendor/spinel/test/widen_int_obj_to_poly.rb +0 -29
- /data/vendor/spinel/test/{multi_write_from_poly_recv.rb.expected → bare_arg_in_module_body.rb.expected} +0 -0
- /data/vendor/spinel/test/{default_argv_narrows_from_string_call_site.rb.expected → cvar_method_first_assign.rb.expected} +0 -0
- /data/vendor/spinel/test/{array_each_with_object.rb.expected → empty_array_push_container_elem.rb.expected} +0 -0
- /data/vendor/spinel/test/{class_var_write.rb.expected → ffi_array_specs_decl.rb.expected} +0 -0
- /data/vendor/spinel/test/{array_method_name_clash.rb.expected → ffi_int_arg_poly_value.rb.expected} +0 -0
- /data/vendor/spinel/test/{initialize_void_wrapper_gc_save.rb.expected → ffi_ptr_array.rb.expected} +0 -0
- /data/vendor/spinel/test/{inherited_method_param_widen.rb.expected → ffi_ptr_int_literal.rb.expected} +0 -0
- /data/vendor/spinel/test/{forward_call_class_method_nested.rb.expected → ffi_str_arg_poly_value.rb.expected} +0 -0
- /data/vendor/spinel/test/{proc_hash_value.rb.expected → file_write_at_tail_position.rb.expected} +0 -0
- /data/vendor/spinel/test/{array_shuffle_ptr.rb.expected → hash_key_via_intermediate_local.rb.expected} +0 -0
- /data/vendor/spinel/test/{forward_call_class_method_inherited_init_int_array.rb.expected → hash_param_widen_from_callee_slot.rb.expected} +0 -0
- /data/vendor/spinel/test/{strip_nullable_int_cast.rb.expected → hash_temp_gc_root.rb.expected} +0 -0
- /data/vendor/spinel/test/{scan_new_calls_class_scope.rb.expected → poly_recv_hash_dup.rb.expected} +0 -0
- /data/vendor/spinel/test/{class_constant_sym_array.rb.expected → respond_to_def_self_method.rb.expected} +0 -0
- /data/vendor/spinel/test/{initialize_param_through_call.rb.expected → warn_unresolved_call_context.rb.expected} +0 -0
|
@@ -0,0 +1,1506 @@
|
|
|
1
|
+
# Shared helpers used by both spinel_analyze.rb and
|
|
2
|
+
# spinel_codegen.rb. Extracted to avoid byte-for-byte
|
|
3
|
+
# duplication between the two compiler passes. Both passes
|
|
4
|
+
# already share node-table accessors (@nd_type / @nd_name /
|
|
5
|
+
# @nd_arguments / etc.) and class-table accessors
|
|
6
|
+
# (cls_find_method / cls_method_return / etc.) by virtue of
|
|
7
|
+
# both defining a `class Compiler`; the methods here only
|
|
8
|
+
# depend on that shared surface.
|
|
9
|
+
#
|
|
10
|
+
# To add a helper here it must:
|
|
11
|
+
# - depend only on instance vars / methods that exist on
|
|
12
|
+
# BOTH the analyze-side and codegen-side Compiler
|
|
13
|
+
# - not perform pass-specific side effects (emit, push narrow
|
|
14
|
+
# stack only via methods both sides define, etc.)
|
|
15
|
+
# - have identical semantics in both passes (drift between
|
|
16
|
+
# the two would re-introduce the original bug)
|
|
17
|
+
|
|
18
|
+
# CRuby bootstrap shim for compiler_state_* declarations. Spinel's
|
|
19
|
+
# analyzer/codegen consume these calls at compile time and emit concrete
|
|
20
|
+
# methods; this shim only keeps the Ruby-hosted bootstrap compiler
|
|
21
|
+
# executable while the compiled binaries are being rebuilt.
|
|
22
|
+
if RUBY_ENGINE == "ruby"
|
|
23
|
+
class Module
|
|
24
|
+
def compiler_state_entries; @compiler_state_entries ||= []; end
|
|
25
|
+
|
|
26
|
+
def compiler_state_register(kind, names)
|
|
27
|
+
names.each do |raw_name|
|
|
28
|
+
compiler_state_entries << [kind.to_s, raw_name.to_s]
|
|
29
|
+
end
|
|
30
|
+
compiler_state_define_runtime_methods
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def compiler_state_int(*names); compiler_state_register("int", names); end
|
|
34
|
+
def compiler_state_str(*names); compiler_state_register("str", names); end
|
|
35
|
+
def compiler_state_sa(*names); compiler_state_register("sa", names); end
|
|
36
|
+
def compiler_state_ia(*names); compiler_state_register("ia", names); end
|
|
37
|
+
|
|
38
|
+
def compiler_state_define_runtime_methods
|
|
39
|
+
return if @compiler_state_runtime_methods_defined
|
|
40
|
+
|
|
41
|
+
@compiler_state_runtime_methods_defined = true
|
|
42
|
+
|
|
43
|
+
define_method(:init_compiler_state) do
|
|
44
|
+
self.class.compiler_state_entries.each do |kind, name|
|
|
45
|
+
val = 0
|
|
46
|
+
if kind == "str"
|
|
47
|
+
val = ""
|
|
48
|
+
elsif kind == "sa"
|
|
49
|
+
val = []
|
|
50
|
+
elsif kind == "ia"
|
|
51
|
+
val = []
|
|
52
|
+
end
|
|
53
|
+
instance_variable_set("@" + name, val)
|
|
54
|
+
end
|
|
55
|
+
0
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
define_method(:dump_compiler_state_ir) do |buf|
|
|
59
|
+
self.class.compiler_state_entries.each do |kind, name|
|
|
60
|
+
ir_name = "@" + name
|
|
61
|
+
val = instance_variable_get(ir_name)
|
|
62
|
+
if kind == "int"
|
|
63
|
+
buf = ir_emit_int(buf, ir_name, val)
|
|
64
|
+
elsif kind == "str"
|
|
65
|
+
buf = ir_emit_str(buf, ir_name, val)
|
|
66
|
+
elsif kind == "sa"
|
|
67
|
+
buf = ir_emit_sa(buf, ir_name, val)
|
|
68
|
+
elsif kind == "ia"
|
|
69
|
+
buf = ir_emit_ia(buf, ir_name, val)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
buf
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
define_method(:compiler_state_set_runtime) do |kind, name, val|
|
|
76
|
+
self.class.compiler_state_entries.each do |entry_kind, field|
|
|
77
|
+
if entry_kind == kind && name == "@" + field
|
|
78
|
+
instance_variable_set(name, val)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
0
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
define_method(:compiler_state_set_int) { |name, val| compiler_state_set_runtime("int", name, val) }
|
|
85
|
+
define_method(:compiler_state_set_str) { |name, val| compiler_state_set_runtime("str", name, val) }
|
|
86
|
+
define_method(:compiler_state_set_sa) { |name, val| compiler_state_set_runtime("sa", name, val) }
|
|
87
|
+
define_method(:compiler_state_set_ia) { |name, val| compiler_state_set_runtime("ia", name, val) }
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
class Compiler
|
|
93
|
+
|
|
94
|
+
# ---- Compile-time class-body declaration helpers ----
|
|
95
|
+
|
|
96
|
+
compiler_state_int :nd_count, :root_id, :analysis_frozen, :ieval_counter, :iexec_counter, :needs_gc, :needs_system
|
|
97
|
+
compiler_state_int :needs_int_array, :needs_float_array, :needs_str_array, :needs_str_int_hash, :needs_str_str_hash, :needs_int_str_hash
|
|
98
|
+
compiler_state_int :needs_sym_int_hash, :needs_sym_str_hash, :needs_sym_intern, :needs_setjmp, :needs_mutable_str, :needs_rb_value
|
|
99
|
+
compiler_state_int :needs_regexp, :needs_rand, :needs_stringio, :needs_lambda, :needs_fiber, :needs_bigint
|
|
100
|
+
compiler_state_int :needs_poly_array, :needs_poly_poly_hash, :needs_str_poly_hash, :needs_sym_poly_hash, :needs_ptr_array, :needs_file_io
|
|
101
|
+
|
|
102
|
+
compiler_state_str :cls_cmeth_live, :cls_meth_live
|
|
103
|
+
|
|
104
|
+
compiler_state_sa :meth_names, :meth_param_names, :meth_param_types, :meth_param_empty, :meth_return_types, :meth_has_defaults
|
|
105
|
+
compiler_state_sa :cls_names, :cls_parents, :cls_includes, :cls_ivar_names, :cls_ivar_types, :cls_ivar_init_definite
|
|
106
|
+
compiler_state_sa :cls_ivar_observed_types, :cls_meth_names, :cls_meth_params, :cls_meth_ptypes, :cls_meth_returns, :cls_meth_bodies
|
|
107
|
+
compiler_state_sa :cls_rest_keys, :dead_mod_cls_meths, :cls_meth_defaults, :cls_meth_ptypes_empty, :cls_meth_prep_chain, :cls_attr_readers
|
|
108
|
+
compiler_state_sa :cls_attr_writers, :cls_cmeth_names, :cls_cmeth_params, :cls_cmeth_ptypes, :cls_cmeth_returns, :cls_cmeth_bodies
|
|
109
|
+
compiler_state_sa :cls_cmeth_defaults, :cls_cmeth_scope_names, :cls_cmeth_scope_types, :cls_meth_has_yield, :cls_method_adapters, :const_names
|
|
110
|
+
compiler_state_sa :const_types, :const_scope_names, :const_init_class, :cvar_names, :cvar_types, :cvar_init_values
|
|
111
|
+
compiler_state_sa :gvar_names, :gvar_types, :module_names, :module_includes, :module_acc_keys, :module_acc_consts
|
|
112
|
+
compiler_state_sa :ffi_modules, :ffi_module_libs, :ffi_module_cflags, :ffi_func_modules, :ffi_func_names, :ffi_func_arg_types
|
|
113
|
+
compiler_state_sa :ffi_func_ret_types, :ffi_func_arg_specs, :ffi_func_ret_specs, :ffi_buf_modules, :ffi_buf_names, :ffi_reader_modules
|
|
114
|
+
compiler_state_sa :ffi_reader_names, :ffi_reader_kinds, :regexp_patterns, :regexp_flags, :dyn_regex_flags, :local_regex_names
|
|
115
|
+
compiler_state_sa :open_class_names, :method_ref_vars, :method_ref_names, :galias_new, :galias_old, :undef_method
|
|
116
|
+
compiler_state_sa :sym_names, :tuple_types, :poly_funcs, :poly_param_types, :ieval_return_types, :ieval_self_param_names
|
|
117
|
+
compiler_state_sa :ieval_extra_param_names, :compile_time_subst_keys, :compile_time_subst_vals, :cls_with_internal_ieval_lift, :toplevel_ivar_names, :toplevel_ivar_types
|
|
118
|
+
compiler_state_sa :lambda_var_ret_names, :lambda_var_ret_types, :multi_const_inits, :meth_blk_param_types, :cls_cmeth_blk_param_types
|
|
119
|
+
compiler_state_sa :iexec_block_pnames, :iexec_block_ptypes
|
|
120
|
+
compiler_state_sa :attr_alias_keys, :attr_alias_ivars
|
|
121
|
+
compiler_state_sa :cls_meth_blk_param_types
|
|
122
|
+
compiler_state_sa :lowered_yield_methods
|
|
123
|
+
|
|
124
|
+
compiler_state_ia :meth_body_ids, :meth_rest_index, :meth_kwrest_index, :meth_has_yield, :cls_rest_idxs, :cls_is_value_type
|
|
125
|
+
compiler_state_ia :cls_is_sra, :const_expr_ids, :const_mutated, :gvar_written, :module_body_ids, :ffi_buf_sizes, :ffi_reader_offsets
|
|
126
|
+
compiler_state_ia :dyn_regex_node_ids, :local_regex_idx, :local_regex_call_nids, :undef_class_idx, :ieval_class_idxs, :ieval_body_ids
|
|
127
|
+
compiler_state_ia :pre_execution_blocks, :post_execution_blocks
|
|
128
|
+
compiler_state_ia :iexec_class_idxs, :iexec_body_ids
|
|
129
|
+
|
|
130
|
+
def compiler_state_init_body_id; -31; end
|
|
131
|
+
def compiler_state_dump_body_id; -32; end
|
|
132
|
+
def compiler_state_set_int_body_id; -33; end
|
|
133
|
+
def compiler_state_set_str_body_id; -34; end
|
|
134
|
+
def compiler_state_set_sa_body_id; -35; end
|
|
135
|
+
def compiler_state_set_ia_body_id; -36; end
|
|
136
|
+
|
|
137
|
+
def compiler_state_synthetic_body_id?(bid)
|
|
138
|
+
if bid <= compiler_state_init_body_id && bid >= compiler_state_set_ia_body_id
|
|
139
|
+
return 1
|
|
140
|
+
end
|
|
141
|
+
0
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def compiler_state_macro_kind(mn)
|
|
145
|
+
return "int" if mn == "compiler_state_int"
|
|
146
|
+
return "str" if mn == "compiler_state_str"
|
|
147
|
+
return "sa" if mn == "compiler_state_sa"
|
|
148
|
+
return "ia" if mn == "compiler_state_ia"
|
|
149
|
+
""
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def compiler_state_field_type(kind)
|
|
153
|
+
return "string" if kind == "str"
|
|
154
|
+
return "str_array" if kind == "sa"
|
|
155
|
+
return "int_array" if kind == "ia"
|
|
156
|
+
"int"
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def compile_time_subst_key(ci, mname, bid, varname)
|
|
160
|
+
ci.to_s + ":" + mname + ":" + bid.to_s + ":" + varname
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def compile_time_subst_lookup(ci, mname, bid, varname)
|
|
164
|
+
if ci < 0 || mname == "" || varname == ""
|
|
165
|
+
return ""
|
|
166
|
+
end
|
|
167
|
+
key = compile_time_subst_key(ci, mname, bid, varname)
|
|
168
|
+
i = 0
|
|
169
|
+
while i < @compile_time_subst_keys.length
|
|
170
|
+
if @compile_time_subst_keys[i] == key
|
|
171
|
+
if i < @compile_time_subst_vals.length
|
|
172
|
+
return @compile_time_subst_vals[i]
|
|
173
|
+
end
|
|
174
|
+
return ""
|
|
175
|
+
end
|
|
176
|
+
i = i + 1
|
|
177
|
+
end
|
|
178
|
+
""
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def compile_time_subst_for_current(varname)
|
|
182
|
+
if @current_class_idx < 0 || @current_method_name == ""
|
|
183
|
+
return ""
|
|
184
|
+
end
|
|
185
|
+
midx = cls_find_method_direct(@current_class_idx, @current_method_name)
|
|
186
|
+
if midx < 0
|
|
187
|
+
return ""
|
|
188
|
+
end
|
|
189
|
+
bodies = @cls_meth_bodies[@current_class_idx].split(";", -1)
|
|
190
|
+
if midx >= bodies.length
|
|
191
|
+
return ""
|
|
192
|
+
end
|
|
193
|
+
compile_time_subst_lookup(@current_class_idx, @current_method_name, bodies[midx].to_i, varname)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def compile_time_literal_type(encoded)
|
|
197
|
+
if encoded.start_with?("sym:")
|
|
198
|
+
return "symbol"
|
|
199
|
+
end
|
|
200
|
+
if encoded.start_with?("str:")
|
|
201
|
+
return "string"
|
|
202
|
+
end
|
|
203
|
+
if encoded.start_with?("int:")
|
|
204
|
+
return "int"
|
|
205
|
+
end
|
|
206
|
+
""
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def compile_time_literal_payload(encoded)
|
|
210
|
+
parts = encoded.split(":", -1)
|
|
211
|
+
if parts.length < 2
|
|
212
|
+
return ""
|
|
213
|
+
end
|
|
214
|
+
payload = ""
|
|
215
|
+
i = 1
|
|
216
|
+
while i < parts.length
|
|
217
|
+
if i > 1
|
|
218
|
+
payload = payload + ":"
|
|
219
|
+
end
|
|
220
|
+
payload = payload + parts[i]
|
|
221
|
+
i = i + 1
|
|
222
|
+
end
|
|
223
|
+
payload
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# ---- Nil-guard narrow helpers (#550) ----
|
|
227
|
+
|
|
228
|
+
# `<lv>.nil?` predicate. Returns the LV name; otherwise "".
|
|
229
|
+
def parse_nil_predicate(pred_id)
|
|
230
|
+
if pred_id < 0
|
|
231
|
+
return ""
|
|
232
|
+
end
|
|
233
|
+
if @nd_type[pred_id] != "CallNode"
|
|
234
|
+
return ""
|
|
235
|
+
end
|
|
236
|
+
if @nd_name[pred_id] != "nil?"
|
|
237
|
+
return ""
|
|
238
|
+
end
|
|
239
|
+
recv = @nd_receiver[pred_id]
|
|
240
|
+
if recv < 0 || @nd_type[recv] != "LocalVariableReadNode"
|
|
241
|
+
return ""
|
|
242
|
+
end
|
|
243
|
+
@nd_name[recv]
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Body ends with a definite scope exit. Used by the nil-guard
|
|
247
|
+
# narrow (issue #550) to identify guards whose continuation
|
|
248
|
+
# only fires when the predicate held. Recognizes:
|
|
249
|
+
# - `return X` (ReturnNode)
|
|
250
|
+
# - `raise ...` / `throw ...` (CallNode)
|
|
251
|
+
# - `break` / `next` (BreakNode / NextNode) -- both unwind
|
|
252
|
+
# the iteration / loop, so the narrow applies to the rest
|
|
253
|
+
# of the enclosing block.
|
|
254
|
+
def body_definitely_exits?(body_id)
|
|
255
|
+
if body_id < 0
|
|
256
|
+
return 0
|
|
257
|
+
end
|
|
258
|
+
stmts_r = get_stmts(body_id)
|
|
259
|
+
if stmts_r.length == 0
|
|
260
|
+
return 0
|
|
261
|
+
end
|
|
262
|
+
last = stmts_r[stmts_r.length - 1]
|
|
263
|
+
if @nd_type[last] == "ReturnNode"
|
|
264
|
+
return 1
|
|
265
|
+
end
|
|
266
|
+
if @nd_type[last] == "BreakNode" || @nd_type[last] == "NextNode"
|
|
267
|
+
return 1
|
|
268
|
+
end
|
|
269
|
+
if @nd_type[last] == "CallNode" && (@nd_name[last] == "raise" || @nd_name[last] == "throw")
|
|
270
|
+
return 1
|
|
271
|
+
end
|
|
272
|
+
0
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Given the rhs of the most recent write to a local variable
|
|
276
|
+
# whose nil? was just checked, return the type the variable
|
|
277
|
+
# narrows to after the nil-exit. Currently recognizes
|
|
278
|
+
# `<string>.index(needle)` / rindex / find_index returning
|
|
279
|
+
# int-or-nil; the non-nil arm is mrb_int. Returns "" when the
|
|
280
|
+
# writer's shape isn't a known int-or-nil source so the caller
|
|
281
|
+
# leaves the type alone. Issue #550.
|
|
282
|
+
def infer_nil_guard_narrow_type(expr_id)
|
|
283
|
+
if expr_id < 0
|
|
284
|
+
return ""
|
|
285
|
+
end
|
|
286
|
+
if @nd_type[expr_id] != "CallNode"
|
|
287
|
+
return ""
|
|
288
|
+
end
|
|
289
|
+
mname_eg = @nd_name[expr_id]
|
|
290
|
+
recv_eg = @nd_receiver[expr_id]
|
|
291
|
+
if recv_eg < 0
|
|
292
|
+
return ""
|
|
293
|
+
end
|
|
294
|
+
if mname_eg == "index" || mname_eg == "rindex" || mname_eg == "find_index"
|
|
295
|
+
rt_eg = infer_type(recv_eg)
|
|
296
|
+
if rt_eg == "string" || rt_eg == "mutable_str"
|
|
297
|
+
return "int"
|
|
298
|
+
end
|
|
299
|
+
# Array#index family on int_array now returns int? (sentinel-
|
|
300
|
+
# encoded). After `return if h.nil?` the live arm sees the value
|
|
301
|
+
# as a plain int, same as the String#index narrow above.
|
|
302
|
+
if rt_eg == "int_array"
|
|
303
|
+
return "int"
|
|
304
|
+
end
|
|
305
|
+
return ""
|
|
306
|
+
end
|
|
307
|
+
# Maybe-missing typed-int-hash read `x = h[k]; return if x.nil?`:
|
|
308
|
+
# the live arm proved the key present, so the read narrows from
|
|
309
|
+
# int? back to a plain mrb_int. Mirrors the int_array arm above.
|
|
310
|
+
# No-op until typed-int-hash `[]` returns int? (#801 Phase 4).
|
|
311
|
+
if mname_eg == "[]"
|
|
312
|
+
rt_he = base_type(infer_type(recv_eg))
|
|
313
|
+
if rt_he == "str_int_hash" || rt_he == "sym_int_hash" || rt_he == "int_int_hash"
|
|
314
|
+
return "int"
|
|
315
|
+
end
|
|
316
|
+
return ""
|
|
317
|
+
end
|
|
318
|
+
""
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
# Recognize `return X if h.nil?` shape; return the LV name or
|
|
322
|
+
# "". Caller threads the stmt list separately into
|
|
323
|
+
# scan_back_writer_narrow_for to derive the narrow type. (Two
|
|
324
|
+
# separate calls instead of one [var, type] return because
|
|
325
|
+
# spinel-self's inference widens an array-return into poly,
|
|
326
|
+
# cascading into push_type_narrow's param signature.)
|
|
327
|
+
# Issue #550.
|
|
328
|
+
def parse_nil_guard_var(nid)
|
|
329
|
+
if nid < 0
|
|
330
|
+
return ""
|
|
331
|
+
end
|
|
332
|
+
if @nd_type[nid] != "IfNode"
|
|
333
|
+
return ""
|
|
334
|
+
end
|
|
335
|
+
body_i = @nd_body[nid]
|
|
336
|
+
if body_definitely_exits?(body_i) == 0
|
|
337
|
+
return ""
|
|
338
|
+
end
|
|
339
|
+
sub_i = @nd_subsequent[nid]
|
|
340
|
+
else_i = @nd_else_clause[nid]
|
|
341
|
+
if sub_i >= 0 || else_i >= 0
|
|
342
|
+
return ""
|
|
343
|
+
end
|
|
344
|
+
parse_nil_predicate(@nd_predicate[nid])
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
def scan_back_writer_narrow_for(stmts_list, before_idx, varname)
|
|
348
|
+
j = before_idx - 1
|
|
349
|
+
while j >= 0
|
|
350
|
+
stmt = stmts_list[j]
|
|
351
|
+
if @nd_type[stmt] == "LocalVariableWriteNode" && @nd_name[stmt] == varname
|
|
352
|
+
return infer_nil_guard_narrow_type(@nd_expression[stmt])
|
|
353
|
+
end
|
|
354
|
+
j = j - 1
|
|
355
|
+
end
|
|
356
|
+
""
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# ---- Poly-recv dispatch helpers (#549) ----
|
|
360
|
+
|
|
361
|
+
# For a `<poly>.<mname>(args)` site, return the static C type
|
|
362
|
+
# the dispatch result temp should have. Returns "poly" when
|
|
363
|
+
# the surviving cls_id arms can't agree on a single scalar.
|
|
364
|
+
# nid + arg_types let the helper apply the same arm-suppression
|
|
365
|
+
# logic the emit loop uses (param-incompat + observed-class
|
|
366
|
+
# narrow), so unreachable arms don't widen the result.
|
|
367
|
+
def poly_dispatch_return_type(mname, nid = -1, arg_types = "".split(","))
|
|
368
|
+
# arg_types defaults to an empty StrArray rather than nil so the
|
|
369
|
+
# nil-default + typed-callsite widening that #634 enables doesn't
|
|
370
|
+
# collapse this param's slot to poly. Both call sites always pass
|
|
371
|
+
# a concrete StrArray, so the empty default is observationally
|
|
372
|
+
# equivalent to the prior nil-then-replace.
|
|
373
|
+
if mname == "[]"
|
|
374
|
+
@needs_rb_value = 1
|
|
375
|
+
return "poly"
|
|
376
|
+
end
|
|
377
|
+
# Hash-shape preserving methods on a poly recv carrying hash
|
|
378
|
+
# storage. The result temp must be sp_RbVal so the per-cls_id
|
|
379
|
+
# arm's `tmp = sp_box_obj(...)` lands. Without this, the temp
|
|
380
|
+
# is mrb_int and the assignment silently no-ops, leaving every
|
|
381
|
+
# downstream consumer reading the int 0 default.
|
|
382
|
+
if mname == "dup" || mname == "each" || mname == "to_h" || mname == "merge"
|
|
383
|
+
@needs_rb_value = 1
|
|
384
|
+
return "poly"
|
|
385
|
+
end
|
|
386
|
+
# `fetch` on a poly recv: runtime cls_id picks between user-class
|
|
387
|
+
# `fetch` arms and built-in Hash-variant arms (StrIntHash /
|
|
388
|
+
# StrStrHash / StrPolyHash). Each arm's value type differs (int /
|
|
389
|
+
# string / poly) so the result temp must be sp_RbVal -- without
|
|
390
|
+
# widening, the temp's static C type comes from the first user
|
|
391
|
+
# class's `fetch` return and other arms' rhs fails to compile
|
|
392
|
+
# against it. Sibling to `[]` widening above; same rationale.
|
|
393
|
+
if mname == "fetch"
|
|
394
|
+
@needs_rb_value = 1
|
|
395
|
+
return "poly"
|
|
396
|
+
end
|
|
397
|
+
# Source-level narrow set from ivar observations: when the
|
|
398
|
+
# receiver reads from an ivar whose observed type set is all
|
|
399
|
+
# obj_X (no poly / no primitives), the dispatch can only ever
|
|
400
|
+
# land on those classes. Combined with the param-incompat
|
|
401
|
+
# check below, this prunes arms whose return type would
|
|
402
|
+
# otherwise widen the dispatch result to sp_RbVal even though
|
|
403
|
+
# they can never fire at runtime. Issues #549, #531.
|
|
404
|
+
narrow_set = poly_dispatch_narrow_class_set(nid)
|
|
405
|
+
# Built-in string methods that compile_poly_method_call also
|
|
406
|
+
# lowers via a SP_TAG_STR arm -- their result temp needs to be
|
|
407
|
+
# at least string-typed so the per-tag dispatch assignment
|
|
408
|
+
# doesn't try to store const char * into a mrb_int slot. If a
|
|
409
|
+
# user class also defines the method with a different return
|
|
410
|
+
# type, the per-class loop below escalates to "poly".
|
|
411
|
+
if mname == "gsub" || mname == "sub"
|
|
412
|
+
ci_s = 0
|
|
413
|
+
diverges = 0
|
|
414
|
+
while ci_s < @cls_names.length
|
|
415
|
+
if narrow_set != "" && poly_dispatch_class_in_set(narrow_set, ci_s) == 0
|
|
416
|
+
ci_s = ci_s + 1
|
|
417
|
+
else
|
|
418
|
+
if cls_find_method(ci_s, mname) >= 0 && poly_dispatch_arm_param_compat(ci_s, mname, arg_types) == 1
|
|
419
|
+
urt = cls_method_return(ci_s, mname)
|
|
420
|
+
if urt != "" && urt != "string"
|
|
421
|
+
diverges = 1
|
|
422
|
+
ci_s = @cls_names.length
|
|
423
|
+
end
|
|
424
|
+
end
|
|
425
|
+
ci_s = ci_s + 1
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
if diverges == 1
|
|
429
|
+
@needs_rb_value = 1
|
|
430
|
+
return "poly"
|
|
431
|
+
end
|
|
432
|
+
return "string"
|
|
433
|
+
end
|
|
434
|
+
# Setters: mname ends with "=" and at least one class has an
|
|
435
|
+
# attr_writer for the bare name. Return type is the ivar type
|
|
436
|
+
# (Ruby returns the rhs from `x = v`); without this, the result
|
|
437
|
+
# tmp's C type defaults to `mrb_int` and `tmp = rhs` mismatches
|
|
438
|
+
# for non-int slots.
|
|
439
|
+
setter_bname = ""
|
|
440
|
+
if mname.length > 1 && mname[mname.length - 1] == "="
|
|
441
|
+
setter_bname = mname[0, mname.length - 1]
|
|
442
|
+
end
|
|
443
|
+
common = ""
|
|
444
|
+
ci = 0
|
|
445
|
+
while ci < @cls_names.length
|
|
446
|
+
if narrow_set != "" && poly_dispatch_class_in_set(narrow_set, ci) == 0
|
|
447
|
+
ci = ci + 1
|
|
448
|
+
else
|
|
449
|
+
rt = ""
|
|
450
|
+
if cls_find_method(ci, mname) >= 0
|
|
451
|
+
# Skip arms whose param types can't accept the dispatch
|
|
452
|
+
# site's arg types -- mirrors the arm_incompat check in
|
|
453
|
+
# the emit loop so the result-type union doesn't see
|
|
454
|
+
# return types from arms the runtime can't reach.
|
|
455
|
+
if poly_dispatch_arm_param_compat(ci, mname, arg_types) == 0
|
|
456
|
+
rt = ""
|
|
457
|
+
else
|
|
458
|
+
rt = cls_method_return(ci, mname)
|
|
459
|
+
end
|
|
460
|
+
elsif cls_has_attr_reader(ci, mname) == 1
|
|
461
|
+
# An attr_reader returns the ivar type. .
|
|
462
|
+
rt = cls_ivar_type(ci, "@" + mname)
|
|
463
|
+
elsif setter_bname != "" && cls_has_attr_writer(ci, setter_bname) == 1
|
|
464
|
+
# An attr_writer setter returns the ivar's type.
|
|
465
|
+
rt = cls_ivar_type(ci, "@" + setter_bname)
|
|
466
|
+
end
|
|
467
|
+
if rt != ""
|
|
468
|
+
if common == ""
|
|
469
|
+
common = rt
|
|
470
|
+
elsif common != rt
|
|
471
|
+
return "poly"
|
|
472
|
+
end
|
|
473
|
+
end
|
|
474
|
+
ci = ci + 1
|
|
475
|
+
end
|
|
476
|
+
end
|
|
477
|
+
common == "" ? "int" : common
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
# Returns a comma-separated list of class indices the dispatch
|
|
481
|
+
# site can possibly land on, derived from the receiver ivar's
|
|
482
|
+
# observed type set. Returns "" when no narrowing is safe
|
|
483
|
+
# (non-ivar receiver, partial observation, or any non-obj
|
|
484
|
+
# observation like "poly" / "int" / "string"). Issue #549.
|
|
485
|
+
def poly_dispatch_narrow_class_set(nid)
|
|
486
|
+
if nid < 0
|
|
487
|
+
return ""
|
|
488
|
+
end
|
|
489
|
+
if @current_class_idx < 0
|
|
490
|
+
return ""
|
|
491
|
+
end
|
|
492
|
+
recv_id = @nd_receiver[nid]
|
|
493
|
+
if recv_id < 0
|
|
494
|
+
return ""
|
|
495
|
+
end
|
|
496
|
+
if @nd_type[recv_id] != "InstanceVariableReadNode"
|
|
497
|
+
return ""
|
|
498
|
+
end
|
|
499
|
+
iname = @nd_name[recv_id]
|
|
500
|
+
obs = cls_ivar_observed_types_for(@current_class_idx, iname)
|
|
501
|
+
if obs == ""
|
|
502
|
+
return ""
|
|
503
|
+
end
|
|
504
|
+
out = ""
|
|
505
|
+
parts = obs.split(",")
|
|
506
|
+
k = 0
|
|
507
|
+
while k < parts.length
|
|
508
|
+
t = parts[k]
|
|
509
|
+
if t == ""
|
|
510
|
+
# blank slot -- uninformative, skip
|
|
511
|
+
elsif t == "poly"
|
|
512
|
+
# "poly" alone means the writer-scan saw a widened union value
|
|
513
|
+
# (typically a method param that received obj_X across multiple
|
|
514
|
+
# callsites and collapsed to poly). The companion ctor-arg
|
|
515
|
+
# propagation pass adds the concrete obj_X entries alongside,
|
|
516
|
+
# so when we ALSO see those, the obj_X set is sharper and we
|
|
517
|
+
# should keep the narrow. Skip the bare "poly" here; if no
|
|
518
|
+
# obj_X entries follow, `out` stays empty and the caller falls
|
|
519
|
+
# back to the unrestricted dispatch.
|
|
520
|
+
elsif is_obj_type(t) == 1
|
|
521
|
+
cname = t[4, t.length - 4]
|
|
522
|
+
cidx = find_class_idx(cname)
|
|
523
|
+
if cidx >= 0
|
|
524
|
+
s_idx = cidx.to_s
|
|
525
|
+
if out == ""
|
|
526
|
+
out = s_idx
|
|
527
|
+
else
|
|
528
|
+
# dedup
|
|
529
|
+
already = 0
|
|
530
|
+
seen = out.split(",")
|
|
531
|
+
sk = 0
|
|
532
|
+
while sk < seen.length
|
|
533
|
+
if seen[sk] == s_idx
|
|
534
|
+
already = 1
|
|
535
|
+
end
|
|
536
|
+
sk = sk + 1
|
|
537
|
+
end
|
|
538
|
+
if already == 0
|
|
539
|
+
out = out + "," + s_idx
|
|
540
|
+
end
|
|
541
|
+
end
|
|
542
|
+
end
|
|
543
|
+
else
|
|
544
|
+
# Truly broad non-obj observation ("int", "string", "float"
|
|
545
|
+
# etc.) — the ivar can hold a value whose dispatch isn't a
|
|
546
|
+
# user-class method call at all. Bail to avoid unsound pruning.
|
|
547
|
+
return ""
|
|
548
|
+
end
|
|
549
|
+
k = k + 1
|
|
550
|
+
end
|
|
551
|
+
out
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
def poly_dispatch_class_in_set(set, ci)
|
|
555
|
+
if set == ""
|
|
556
|
+
return 1
|
|
557
|
+
end
|
|
558
|
+
target = ci.to_s
|
|
559
|
+
parts = set.split(",")
|
|
560
|
+
k = 0
|
|
561
|
+
while k < parts.length
|
|
562
|
+
if parts[k] == target
|
|
563
|
+
return 1
|
|
564
|
+
end
|
|
565
|
+
# Allow when ci is a descendant of an observed class. The ivar
|
|
566
|
+
# may have been written via a typed setter (`def set_x(f); @x = f; end`)
|
|
567
|
+
# whose param is the declared base type, but the actual runtime
|
|
568
|
+
# object is a subclass instance whose own cls_id won't appear in
|
|
569
|
+
# the observed set. Without this, the dispatch only emits the
|
|
570
|
+
# base-class arm and the subclass override is silently skipped --
|
|
571
|
+
# the #616 filter-elision shape (App.set_before(SubFilter.new) ->
|
|
572
|
+
# @before_filter.before(...) where the override never fires).
|
|
573
|
+
ancestor_ci = parts[k].to_i
|
|
574
|
+
if ancestor_ci >= 0 && cls_is_descendant(ci, ancestor_ci) == 1
|
|
575
|
+
return 1
|
|
576
|
+
end
|
|
577
|
+
k = k + 1
|
|
578
|
+
end
|
|
579
|
+
0
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
# Mirrors the arm_incompat check inside compile_poly_method_call's
|
|
583
|
+
# emit loop. Returns 1 when the arm's param types are compatible
|
|
584
|
+
# with the dispatch site's arg types, 0 when at least one slot
|
|
585
|
+
# has a base-type mismatch outside the int/symbol/bool family.
|
|
586
|
+
def poly_dispatch_arm_param_compat(ci, mname, arg_types)
|
|
587
|
+
midx = cls_find_method_direct(ci, mname)
|
|
588
|
+
owner_idx = ci
|
|
589
|
+
if midx < 0
|
|
590
|
+
owner_name = find_method_owner(ci, mname)
|
|
591
|
+
if owner_name != ""
|
|
592
|
+
owner_idx = find_class_idx(owner_name)
|
|
593
|
+
if owner_idx >= 0
|
|
594
|
+
midx = cls_find_method_direct(owner_idx, mname)
|
|
595
|
+
end
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
if midx < 0
|
|
599
|
+
return 1
|
|
600
|
+
end
|
|
601
|
+
arm_ptypes = cls_meth_ptypes_get(owner_idx, midx)
|
|
602
|
+
pk = 0
|
|
603
|
+
while pk < arm_ptypes.length && pk < arg_types.length
|
|
604
|
+
at_b = base_type(arg_types[pk])
|
|
605
|
+
pt_b = base_type(arm_ptypes[pk])
|
|
606
|
+
if at_b != "" && pt_b != "" && at_b != "poly" && pt_b != "poly" && at_b != pt_b
|
|
607
|
+
if (at_b == "int" && pt_b == "symbol") || (at_b == "symbol" && pt_b == "int") ||
|
|
608
|
+
(at_b == "int" && pt_b == "bool") || (at_b == "bool" && pt_b == "int")
|
|
609
|
+
# compatible
|
|
610
|
+
elsif (at_b == "int" && pt_b == "bigint") || (at_b == "bigint" && pt_b == "int")
|
|
611
|
+
# promote mode: int and bigint coerce at the call boundary via
|
|
612
|
+
# sp_bigint_new_int / sp_bigint_to_int.
|
|
613
|
+
else
|
|
614
|
+
return 0
|
|
615
|
+
end
|
|
616
|
+
end
|
|
617
|
+
pk = pk + 1
|
|
618
|
+
end
|
|
619
|
+
1
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
# ---- AST id-list cache ----
|
|
623
|
+
|
|
624
|
+
# Parse comma-sep node IDs into IntArray. Manually walks bytes to avoid
|
|
625
|
+
# allocating the intermediate StrArray + substrings that `String#split`
|
|
626
|
+
# would produce -- this is called ~100 K times during bootstrap.
|
|
627
|
+
# Results are cached by input string: AST fields are immutable once
|
|
628
|
+
# parsed, so the same IntArray can be shared across callers. Callers
|
|
629
|
+
# must treat the result as read-only.
|
|
630
|
+
def parse_id_list(s)
|
|
631
|
+
if @parse_id_cache.key?(s)
|
|
632
|
+
# Checked read: the guard proves the key present, so fetch keeps the
|
|
633
|
+
# static type `int` (not the maybe-missing int? the public `[]` now
|
|
634
|
+
# yields, #801 Phase 4) and the pool index stays non-null.
|
|
635
|
+
return @parse_id_pool[@parse_id_cache.fetch(s)]
|
|
636
|
+
end
|
|
637
|
+
result = []
|
|
638
|
+
if s != ""
|
|
639
|
+
bs = s.bytes
|
|
640
|
+
i = 0
|
|
641
|
+
n = bs.length
|
|
642
|
+
num = 0
|
|
643
|
+
while i < n
|
|
644
|
+
b = bs[i]
|
|
645
|
+
if b == 44 # ','
|
|
646
|
+
result.push(num)
|
|
647
|
+
num = 0
|
|
648
|
+
else
|
|
649
|
+
num = num * 10 + (b - 48)
|
|
650
|
+
end
|
|
651
|
+
i = i + 1
|
|
652
|
+
end
|
|
653
|
+
result.push(num)
|
|
654
|
+
end
|
|
655
|
+
@parse_id_cache[s] = @parse_id_pool.length
|
|
656
|
+
@parse_id_pool.push(result)
|
|
657
|
+
result
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
# The enclosing module's name when `self` denotes a module -- i.e.
|
|
661
|
+
# inside a module body or a `def self.x` module class-method.
|
|
662
|
+
# current_lexical_scope_name already yields the module name in both
|
|
663
|
+
# contexts (directly from @current_lexical_scope for a body, or by
|
|
664
|
+
# stripping `_cls_<m>` off @current_method_name for a class method);
|
|
665
|
+
# this just gates it on the scope actually being a module so `self`
|
|
666
|
+
# in a plain class isn't mistaken for a module singleton receiver.
|
|
667
|
+
# Returns "" when self is not a module. Used to route `self.<acc>` /
|
|
668
|
+
# `self.<acc> = v` to the same module-singleton-accessor slot that
|
|
669
|
+
# `Mod.<acc>` resolves to.
|
|
670
|
+
def current_module_scope
|
|
671
|
+
scope = current_lexical_scope_name
|
|
672
|
+
if scope != "" && module_name_exists(scope) == 1
|
|
673
|
+
return scope
|
|
674
|
+
end
|
|
675
|
+
""
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
# ---- AST node table storage (parallel arrays by node ID) ----
|
|
679
|
+
# The 46 @nd_* arrays are initialized in each host's `initialize`
|
|
680
|
+
# and operated on here. Fields are listed explicitly (not via
|
|
681
|
+
# ivar reflection) because the spinel-self type inferencer reads
|
|
682
|
+
# the literal `@nd_X.push(0)` vs `@nd_X.push("")` shape to pick
|
|
683
|
+
# IntArray vs StrArray storage per slot.
|
|
684
|
+
|
|
685
|
+
def alloc_node
|
|
686
|
+
nid = @nd_count
|
|
687
|
+
@nd_type.push("")
|
|
688
|
+
@nd_name.push("")
|
|
689
|
+
@nd_value.push(0)
|
|
690
|
+
@nd_line.push(0) # keep the source-map arrays parallel with the rest, so a
|
|
691
|
+
@nd_file.push(0) # dynamically-allocated node can't drift them out of sync
|
|
692
|
+
@nd_col.push(0) # (and the self-host inferencer needs the literal push here)
|
|
693
|
+
@nd_content.push("")
|
|
694
|
+
@nd_flags.push(0)
|
|
695
|
+
@nd_operator.push("")
|
|
696
|
+
@nd_binop.push("")
|
|
697
|
+
@nd_callop.push("")
|
|
698
|
+
@nd_unescaped.push("")
|
|
699
|
+
@nd_receiver.push(-1)
|
|
700
|
+
@nd_arguments.push(-1)
|
|
701
|
+
@nd_body.push(-1)
|
|
702
|
+
@nd_block.push(-1)
|
|
703
|
+
@nd_parameters.push(-1)
|
|
704
|
+
@nd_predicate.push(-1)
|
|
705
|
+
@nd_subsequent.push(-1)
|
|
706
|
+
@nd_else_clause.push(-1)
|
|
707
|
+
@nd_left.push(-1)
|
|
708
|
+
@nd_right.push(-1)
|
|
709
|
+
@nd_constant_path.push(-1)
|
|
710
|
+
@nd_superclass.push(-1)
|
|
711
|
+
@nd_rest.push(-1)
|
|
712
|
+
@nd_keyword_rest.push(-1)
|
|
713
|
+
@nd_rescue_clause.push(-1)
|
|
714
|
+
@nd_ensure_clause.push(-1)
|
|
715
|
+
@nd_expression.push(-1)
|
|
716
|
+
@nd_target.push(-1)
|
|
717
|
+
@nd_pattern.push(-1)
|
|
718
|
+
@nd_key.push(-1)
|
|
719
|
+
@nd_reference.push(-1)
|
|
720
|
+
@nd_collection.push(-1)
|
|
721
|
+
@nd_stmts.push("")
|
|
722
|
+
@nd_args.push("")
|
|
723
|
+
@nd_requireds.push("")
|
|
724
|
+
@nd_optionals.push("")
|
|
725
|
+
@nd_keywords.push("")
|
|
726
|
+
@nd_elements.push("")
|
|
727
|
+
@nd_parts.push("")
|
|
728
|
+
@nd_conditions.push("")
|
|
729
|
+
@nd_exceptions.push("")
|
|
730
|
+
@nd_targets.push("")
|
|
731
|
+
@nd_rights.push("")
|
|
732
|
+
@nd_posts.push("")
|
|
733
|
+
@nd_new_name.push(-1)
|
|
734
|
+
@nd_old_name.push(-1)
|
|
735
|
+
@nd_names.push("")
|
|
736
|
+
@nd_inferred_type.push("")
|
|
737
|
+
@nd_scope_names.push("")
|
|
738
|
+
@nd_scope_types.push("")
|
|
739
|
+
@nd_rat_num.push("")
|
|
740
|
+
@nd_rat_den.push("")
|
|
741
|
+
@nd_count = @nd_count + 1
|
|
742
|
+
nid
|
|
743
|
+
end
|
|
744
|
+
|
|
745
|
+
# Bulk presize variant called by NodeTableLoader after Pass 1
|
|
746
|
+
# computes max node id. Allocates each parallel array to size `n`
|
|
747
|
+
# with its default fill value in one shot, avoiding ~46 * n
|
|
748
|
+
# individual Array#push calls (and the amortized realloc events
|
|
749
|
+
# that come with them). Field setters then write into preallocated
|
|
750
|
+
# slots by index.
|
|
751
|
+
def alloc_nodes(n)
|
|
752
|
+
@nd_type = Array.new(n, "")
|
|
753
|
+
@nd_name = Array.new(n, "")
|
|
754
|
+
@nd_value = Array.new(n, 0)
|
|
755
|
+
@nd_line = Array.new(n, 0)
|
|
756
|
+
@nd_file = Array.new(n, 0)
|
|
757
|
+
@nd_col = Array.new(n, 0)
|
|
758
|
+
@nd_content = Array.new(n, "")
|
|
759
|
+
@nd_flags = Array.new(n, 0)
|
|
760
|
+
@nd_operator = Array.new(n, "")
|
|
761
|
+
@nd_binop = Array.new(n, "")
|
|
762
|
+
@nd_callop = Array.new(n, "")
|
|
763
|
+
@nd_unescaped = Array.new(n, "")
|
|
764
|
+
@nd_receiver = Array.new(n, -1)
|
|
765
|
+
@nd_arguments = Array.new(n, -1)
|
|
766
|
+
@nd_body = Array.new(n, -1)
|
|
767
|
+
@nd_block = Array.new(n, -1)
|
|
768
|
+
@nd_parameters = Array.new(n, -1)
|
|
769
|
+
@nd_predicate = Array.new(n, -1)
|
|
770
|
+
@nd_subsequent = Array.new(n, -1)
|
|
771
|
+
@nd_else_clause = Array.new(n, -1)
|
|
772
|
+
@nd_left = Array.new(n, -1)
|
|
773
|
+
@nd_right = Array.new(n, -1)
|
|
774
|
+
@nd_constant_path = Array.new(n, -1)
|
|
775
|
+
@nd_superclass = Array.new(n, -1)
|
|
776
|
+
@nd_rest = Array.new(n, -1)
|
|
777
|
+
@nd_keyword_rest = Array.new(n, -1)
|
|
778
|
+
@nd_rescue_clause = Array.new(n, -1)
|
|
779
|
+
@nd_ensure_clause = Array.new(n, -1)
|
|
780
|
+
@nd_expression = Array.new(n, -1)
|
|
781
|
+
@nd_target = Array.new(n, -1)
|
|
782
|
+
@nd_pattern = Array.new(n, -1)
|
|
783
|
+
@nd_key = Array.new(n, -1)
|
|
784
|
+
@nd_reference = Array.new(n, -1)
|
|
785
|
+
@nd_collection = Array.new(n, -1)
|
|
786
|
+
@nd_stmts = Array.new(n, "")
|
|
787
|
+
@nd_args = Array.new(n, "")
|
|
788
|
+
@nd_requireds = Array.new(n, "")
|
|
789
|
+
@nd_optionals = Array.new(n, "")
|
|
790
|
+
@nd_keywords = Array.new(n, "")
|
|
791
|
+
@nd_elements = Array.new(n, "")
|
|
792
|
+
@nd_parts = Array.new(n, "")
|
|
793
|
+
@nd_conditions = Array.new(n, "")
|
|
794
|
+
@nd_exceptions = Array.new(n, "")
|
|
795
|
+
@nd_targets = Array.new(n, "")
|
|
796
|
+
@nd_rights = Array.new(n, "")
|
|
797
|
+
@nd_posts = Array.new(n, "")
|
|
798
|
+
@nd_new_name = Array.new(n, -1)
|
|
799
|
+
@nd_old_name = Array.new(n, -1)
|
|
800
|
+
@nd_names = Array.new(n, "")
|
|
801
|
+
@nd_inferred_type = Array.new(n, "")
|
|
802
|
+
@nd_scope_names = Array.new(n, "")
|
|
803
|
+
@nd_scope_types = Array.new(n, "")
|
|
804
|
+
# Issue #841: RationalNode literal slots.
|
|
805
|
+
@nd_rat_num = Array.new(n, "")
|
|
806
|
+
@nd_rat_den = Array.new(n, "")
|
|
807
|
+
@nd_count = n
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
def read_text_ast(data)
|
|
811
|
+
loader = NodeTableLoader.new(self)
|
|
812
|
+
loader.read_text_ast(data)
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
def set_root_id(root_id)
|
|
816
|
+
@root_id = root_id
|
|
817
|
+
end
|
|
818
|
+
|
|
819
|
+
# Issue #878: parser emits SOURCE_FILE near the top so __dir__
|
|
820
|
+
# (and similar compile-time helpers) can recover the path
|
|
821
|
+
# without scanning for SourceFileNode entries.
|
|
822
|
+
def set_source_file_path(path)
|
|
823
|
+
@source_file_path = path
|
|
824
|
+
end
|
|
825
|
+
|
|
826
|
+
def set_node_type(nid, node_type)
|
|
827
|
+
@nd_type[nid] = node_type
|
|
828
|
+
end
|
|
829
|
+
|
|
830
|
+
def set_node_content(nid, content)
|
|
831
|
+
@nd_content[nid] = content
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
# `if`-chain (not `case`) — `case` over many string literals
|
|
835
|
+
# measured ~58% slower on the codegen self-compile workload.
|
|
836
|
+
def set_string_field(nid, field, val)
|
|
837
|
+
if field == "name"
|
|
838
|
+
@nd_name[nid] = val
|
|
839
|
+
end
|
|
840
|
+
if field == "content"
|
|
841
|
+
@nd_content[nid] = val
|
|
842
|
+
end
|
|
843
|
+
if field == "value"
|
|
844
|
+
@nd_content[nid] = val
|
|
845
|
+
end
|
|
846
|
+
if field == "operator"
|
|
847
|
+
@nd_operator[nid] = val
|
|
848
|
+
end
|
|
849
|
+
if field == "binary_operator"
|
|
850
|
+
@nd_binop[nid] = val
|
|
851
|
+
end
|
|
852
|
+
if field == "call_operator"
|
|
853
|
+
@nd_callop[nid] = val
|
|
854
|
+
end
|
|
855
|
+
if field == "unescaped"
|
|
856
|
+
@nd_unescaped[nid] = val
|
|
857
|
+
end
|
|
858
|
+
if field == "kind"
|
|
859
|
+
# UnsupportedNode carries the Prism node-type name here so
|
|
860
|
+
# codegen can surface a precise compile error.
|
|
861
|
+
@nd_content[nid] = val
|
|
862
|
+
end
|
|
863
|
+
# Issue #841: RationalNode carries numerator and denominator
|
|
864
|
+
# as decimal-text strings (loaded into separate slots so
|
|
865
|
+
# codegen can synthesize sp_rational_new(num, den) literals).
|
|
866
|
+
if field == "rat_num"
|
|
867
|
+
@nd_rat_num[nid] = val
|
|
868
|
+
end
|
|
869
|
+
if field == "rat_den"
|
|
870
|
+
@nd_rat_den[nid] = val
|
|
871
|
+
end
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
def set_int_field(nid, field, val)
|
|
875
|
+
if field == "value"
|
|
876
|
+
@nd_value[nid] = val
|
|
877
|
+
end
|
|
878
|
+
if field == "flags"
|
|
879
|
+
@nd_flags[nid] = val
|
|
880
|
+
end
|
|
881
|
+
if field == "number"
|
|
882
|
+
@nd_value[nid] = val
|
|
883
|
+
end
|
|
884
|
+
if field == "maximum"
|
|
885
|
+
@nd_value[nid] = val
|
|
886
|
+
end
|
|
887
|
+
if field == "start_line"
|
|
888
|
+
@nd_value[nid] = val
|
|
889
|
+
end
|
|
890
|
+
if field == "source_line"
|
|
891
|
+
# UnsupportedNode carries the source line so codegen can cite
|
|
892
|
+
# location in the compile error.
|
|
893
|
+
@nd_value[nid] = val
|
|
894
|
+
end
|
|
895
|
+
# Debug builds only (SPINEL_DEBUG=1): the parser stamps every node
|
|
896
|
+
# with its 1-based source line in a dedicated slot so codegen can
|
|
897
|
+
# emit `#line` directives. Kept separate from @nd_value, which is
|
|
898
|
+
# overloaded for integer/float literal values, numbered-param max, etc.
|
|
899
|
+
if field == "node_line"
|
|
900
|
+
@nd_line[nid] = val
|
|
901
|
+
end
|
|
902
|
+
# Debug multi-file map: id into the FILE table (0 = toplevel source).
|
|
903
|
+
if field == "node_file"
|
|
904
|
+
@nd_file[nid] = val
|
|
905
|
+
end
|
|
906
|
+
# Debug/types export: 0-based source column for hover position keys.
|
|
907
|
+
if field == "node_col"
|
|
908
|
+
@nd_col[nid] = val
|
|
909
|
+
end
|
|
910
|
+
end
|
|
911
|
+
|
|
912
|
+
# Debug multi-file map: record a FILE <id> <path> table entry emitted by
|
|
913
|
+
# the parser. Grown on demand so ids can arrive in any order.
|
|
914
|
+
def set_file_entry(id, path)
|
|
915
|
+
# The analyze/codegen consumers initialize @file_table = []; this shared
|
|
916
|
+
# helper assumes the slot exists. A bare `@file_table ||= []` fallback is
|
|
917
|
+
# unsafe under self-host inference: the empty literal lowers to IntArray
|
|
918
|
+
# and collides with the PolyArray-typed slot, breaking the build.
|
|
919
|
+
while @file_table.length <= id
|
|
920
|
+
@file_table.push("")
|
|
921
|
+
end
|
|
922
|
+
@file_table[id] = path
|
|
923
|
+
end
|
|
924
|
+
|
|
925
|
+
def set_ref_field(nid, field, ref_id)
|
|
926
|
+
if field == "receiver"
|
|
927
|
+
@nd_receiver[nid] = ref_id
|
|
928
|
+
end
|
|
929
|
+
if field == "arguments"
|
|
930
|
+
@nd_arguments[nid] = ref_id
|
|
931
|
+
end
|
|
932
|
+
if field == "body"
|
|
933
|
+
@nd_body[nid] = ref_id
|
|
934
|
+
end
|
|
935
|
+
if field == "block"
|
|
936
|
+
@nd_block[nid] = ref_id
|
|
937
|
+
end
|
|
938
|
+
if field == "parameters"
|
|
939
|
+
@nd_parameters[nid] = ref_id
|
|
940
|
+
end
|
|
941
|
+
if field == "predicate"
|
|
942
|
+
@nd_predicate[nid] = ref_id
|
|
943
|
+
end
|
|
944
|
+
if field == "subsequent"
|
|
945
|
+
@nd_subsequent[nid] = ref_id
|
|
946
|
+
end
|
|
947
|
+
if field == "else_clause"
|
|
948
|
+
@nd_else_clause[nid] = ref_id
|
|
949
|
+
end
|
|
950
|
+
if field == "left"
|
|
951
|
+
@nd_left[nid] = ref_id
|
|
952
|
+
end
|
|
953
|
+
if field == "right"
|
|
954
|
+
@nd_right[nid] = ref_id
|
|
955
|
+
end
|
|
956
|
+
if field == "constant_path"
|
|
957
|
+
@nd_constant_path[nid] = ref_id
|
|
958
|
+
end
|
|
959
|
+
if field == "superclass"
|
|
960
|
+
@nd_superclass[nid] = ref_id
|
|
961
|
+
end
|
|
962
|
+
if field == "rest"
|
|
963
|
+
@nd_rest[nid] = ref_id
|
|
964
|
+
end
|
|
965
|
+
if field == "keyword_rest"
|
|
966
|
+
@nd_keyword_rest[nid] = ref_id
|
|
967
|
+
end
|
|
968
|
+
if field == "rescue_clause"
|
|
969
|
+
@nd_rescue_clause[nid] = ref_id
|
|
970
|
+
end
|
|
971
|
+
if field == "ensure_clause"
|
|
972
|
+
@nd_ensure_clause[nid] = ref_id
|
|
973
|
+
end
|
|
974
|
+
if field == "expression"
|
|
975
|
+
@nd_expression[nid] = ref_id
|
|
976
|
+
end
|
|
977
|
+
# Issue #840: ImaginaryNode "numeric" field carries the imaginary
|
|
978
|
+
# coefficient (IntegerNode or FloatNode); reuse the @nd_expression
|
|
979
|
+
# slot so codegen reads it the same way.
|
|
980
|
+
if field == "numeric"
|
|
981
|
+
@nd_expression[nid] = ref_id
|
|
982
|
+
end
|
|
983
|
+
if field == "target"
|
|
984
|
+
@nd_target[nid] = ref_id
|
|
985
|
+
end
|
|
986
|
+
if field == "pattern"
|
|
987
|
+
@nd_pattern[nid] = ref_id
|
|
988
|
+
end
|
|
989
|
+
if field == "key"
|
|
990
|
+
@nd_key[nid] = ref_id
|
|
991
|
+
end
|
|
992
|
+
if field == "reference"
|
|
993
|
+
@nd_reference[nid] = ref_id
|
|
994
|
+
end
|
|
995
|
+
if field == "collection"
|
|
996
|
+
@nd_collection[nid] = ref_id
|
|
997
|
+
end
|
|
998
|
+
if field == "statements"
|
|
999
|
+
@nd_body[nid] = ref_id
|
|
1000
|
+
end
|
|
1001
|
+
if field == "value"
|
|
1002
|
+
@nd_expression[nid] = ref_id
|
|
1003
|
+
end
|
|
1004
|
+
if field == "index"
|
|
1005
|
+
@nd_target[nid] = ref_id
|
|
1006
|
+
end
|
|
1007
|
+
if field == "parent"
|
|
1008
|
+
@nd_receiver[nid] = ref_id
|
|
1009
|
+
end
|
|
1010
|
+
if field == "rescue_expression"
|
|
1011
|
+
@nd_else_clause[nid] = ref_id
|
|
1012
|
+
end
|
|
1013
|
+
if field == "call"
|
|
1014
|
+
@nd_receiver[nid] = ref_id
|
|
1015
|
+
end
|
|
1016
|
+
if field == "new_name"
|
|
1017
|
+
# AliasMethodNode / AliasGlobalVariableNode -- the new-name slot
|
|
1018
|
+
# (a SymbolNode for methods, GlobalVariableReadNode for globals).
|
|
1019
|
+
@nd_new_name[nid] = ref_id
|
|
1020
|
+
end
|
|
1021
|
+
if field == "old_name"
|
|
1022
|
+
@nd_old_name[nid] = ref_id
|
|
1023
|
+
end
|
|
1024
|
+
end
|
|
1025
|
+
|
|
1026
|
+
def set_array_field(nid, field, ids_str)
|
|
1027
|
+
if field == "body"
|
|
1028
|
+
@nd_stmts[nid] = ids_str
|
|
1029
|
+
end
|
|
1030
|
+
if field == "arguments"
|
|
1031
|
+
@nd_args[nid] = ids_str
|
|
1032
|
+
end
|
|
1033
|
+
if field == "requireds"
|
|
1034
|
+
@nd_requireds[nid] = ids_str
|
|
1035
|
+
end
|
|
1036
|
+
if field == "optionals"
|
|
1037
|
+
@nd_optionals[nid] = ids_str
|
|
1038
|
+
end
|
|
1039
|
+
if field == "keywords"
|
|
1040
|
+
@nd_keywords[nid] = ids_str
|
|
1041
|
+
end
|
|
1042
|
+
if field == "elements"
|
|
1043
|
+
@nd_elements[nid] = ids_str
|
|
1044
|
+
end
|
|
1045
|
+
if field == "parts"
|
|
1046
|
+
@nd_parts[nid] = ids_str
|
|
1047
|
+
end
|
|
1048
|
+
if field == "conditions"
|
|
1049
|
+
@nd_conditions[nid] = ids_str
|
|
1050
|
+
end
|
|
1051
|
+
if field == "exceptions"
|
|
1052
|
+
@nd_exceptions[nid] = ids_str
|
|
1053
|
+
end
|
|
1054
|
+
if field == "lefts"
|
|
1055
|
+
@nd_targets[nid] = ids_str
|
|
1056
|
+
end
|
|
1057
|
+
if field == "targets"
|
|
1058
|
+
@nd_targets[nid] = ids_str
|
|
1059
|
+
end
|
|
1060
|
+
if field == "rights"
|
|
1061
|
+
@nd_rights[nid] = ids_str
|
|
1062
|
+
end
|
|
1063
|
+
if field == "posts"
|
|
1064
|
+
@nd_posts[nid] = ids_str
|
|
1065
|
+
end
|
|
1066
|
+
if field == "names"
|
|
1067
|
+
# UndefNode -- list of SymbolNode names to undef.
|
|
1068
|
+
@nd_names[nid] = ids_str
|
|
1069
|
+
end
|
|
1070
|
+
end
|
|
1071
|
+
|
|
1072
|
+
# Membership test for the self-recursive-yield registry (populated by
|
|
1073
|
+
# analyze's detect_lowered_yield_methods, serialized to IR, read by
|
|
1074
|
+
# both passes). `key` is "<ClassName>#<method>" / "#<method>".
|
|
1075
|
+
def is_lowered_yield_method(key)
|
|
1076
|
+
if @lowered_yield_methods == nil
|
|
1077
|
+
return 0
|
|
1078
|
+
end
|
|
1079
|
+
if not_in(key, @lowered_yield_methods) == 0
|
|
1080
|
+
return 1
|
|
1081
|
+
end
|
|
1082
|
+
0
|
|
1083
|
+
end
|
|
1084
|
+
|
|
1085
|
+
# True when the method currently being emitted/analyzed is a lowered
|
|
1086
|
+
# self-recursive yield method (its `yield`s call the synthetic
|
|
1087
|
+
# `__yblk__` proc param). Built from @current_class_idx /
|
|
1088
|
+
# @current_method_name so it stays valid inside a forwarded proc
|
|
1089
|
+
# literal body (those don't reset the enclosing-method state).
|
|
1090
|
+
def current_method_is_lowered?
|
|
1091
|
+
if @current_method_name == nil || @current_method_name == ""
|
|
1092
|
+
return 0
|
|
1093
|
+
end
|
|
1094
|
+
cls = ""
|
|
1095
|
+
if @current_class_idx >= 0 && @current_class_idx < @cls_names.length
|
|
1096
|
+
cls = @cls_names[@current_class_idx]
|
|
1097
|
+
end
|
|
1098
|
+
is_lowered_yield_method(cls + "#" + @current_method_name)
|
|
1099
|
+
end
|
|
1100
|
+
|
|
1101
|
+
# ---- Convenience: get stmts of a body node ----
|
|
1102
|
+
def get_stmts(nid)
|
|
1103
|
+
if nid < 0
|
|
1104
|
+
return []
|
|
1105
|
+
end
|
|
1106
|
+
# If it's a StatementsNode, return its stmts
|
|
1107
|
+
if @nd_type[nid] == "StatementsNode"
|
|
1108
|
+
return parse_id_list(@nd_stmts[nid])
|
|
1109
|
+
end
|
|
1110
|
+
# Otherwise return single-element array
|
|
1111
|
+
result = []
|
|
1112
|
+
result.push(nid)
|
|
1113
|
+
result
|
|
1114
|
+
end
|
|
1115
|
+
|
|
1116
|
+
# Resolve `class CONST` (and `module`) where CONST is a constant
|
|
1117
|
+
# aliased to an existing class via `CONST = SomeClass` or
|
|
1118
|
+
# `CONST = <literal-or-class>.class`, so the body reopens that class
|
|
1119
|
+
# rather than defining a fresh one named after the alias (#1036:
|
|
1120
|
+
# `INTEGER_KLASS = 1.class; class INTEGER_KLASS; include M; end`).
|
|
1121
|
+
#
|
|
1122
|
+
# Runs in BOTH analyze and codegen (each loads its own AST) before any
|
|
1123
|
+
# class collection, and rewrites the ClassNode's constant_path name in
|
|
1124
|
+
# place. Doing it at the source means every downstream name derivation
|
|
1125
|
+
# sees the resolved name -- no half-applied alias where methods land
|
|
1126
|
+
# on one class index and dispatch resolves another.
|
|
1127
|
+
def resolve_class_aliases
|
|
1128
|
+
root = @root_id
|
|
1129
|
+
if @nd_type[root] != "ProgramNode"
|
|
1130
|
+
return
|
|
1131
|
+
end
|
|
1132
|
+
class_names = "".split(",", -1)
|
|
1133
|
+
collect_classnode_names(root, class_names)
|
|
1134
|
+
amap_from = "".split(",", -1)
|
|
1135
|
+
amap_to = "".split(",", -1)
|
|
1136
|
+
build_class_alias_map(root, class_names, amap_from, amap_to)
|
|
1137
|
+
if amap_from.length == 0
|
|
1138
|
+
return
|
|
1139
|
+
end
|
|
1140
|
+
rewrite_class_alias_refs(root, amap_from, amap_to)
|
|
1141
|
+
end
|
|
1142
|
+
|
|
1143
|
+
def collect_classnode_names(nid, acc)
|
|
1144
|
+
if nid < 0
|
|
1145
|
+
return
|
|
1146
|
+
end
|
|
1147
|
+
if @nd_type[nid] == "ClassNode"
|
|
1148
|
+
cp = @nd_constant_path[nid]
|
|
1149
|
+
if cp >= 0 && @nd_type[cp] == "ConstantReadNode"
|
|
1150
|
+
nm = @nd_name[cp]
|
|
1151
|
+
if not_in(nm, acc) == 1
|
|
1152
|
+
acc.push(nm)
|
|
1153
|
+
end
|
|
1154
|
+
end
|
|
1155
|
+
end
|
|
1156
|
+
kids = []
|
|
1157
|
+
push_child_ids(nid, kids)
|
|
1158
|
+
k = 0
|
|
1159
|
+
while k < kids.length
|
|
1160
|
+
collect_classnode_names(kids[k], acc)
|
|
1161
|
+
k = k + 1
|
|
1162
|
+
end
|
|
1163
|
+
end
|
|
1164
|
+
|
|
1165
|
+
# The class a literal node is an instance of, for `<lit>.class`.
|
|
1166
|
+
def literal_class_name(nid)
|
|
1167
|
+
if nid < 0
|
|
1168
|
+
return ""
|
|
1169
|
+
end
|
|
1170
|
+
t = @nd_type[nid]
|
|
1171
|
+
if t == "IntegerNode"
|
|
1172
|
+
return "Integer"
|
|
1173
|
+
end
|
|
1174
|
+
if t == "FloatNode"
|
|
1175
|
+
return "Float"
|
|
1176
|
+
end
|
|
1177
|
+
if t == "StringNode"
|
|
1178
|
+
return "String"
|
|
1179
|
+
end
|
|
1180
|
+
if t == "SymbolNode"
|
|
1181
|
+
return "Symbol"
|
|
1182
|
+
end
|
|
1183
|
+
if t == "ArrayNode"
|
|
1184
|
+
return "Array"
|
|
1185
|
+
end
|
|
1186
|
+
if t == "HashNode"
|
|
1187
|
+
return "Hash"
|
|
1188
|
+
end
|
|
1189
|
+
if t == "RegularExpressionNode"
|
|
1190
|
+
return "Regexp"
|
|
1191
|
+
end
|
|
1192
|
+
if t == "TrueNode"
|
|
1193
|
+
return "TrueClass"
|
|
1194
|
+
end
|
|
1195
|
+
if t == "FalseNode"
|
|
1196
|
+
return "FalseClass"
|
|
1197
|
+
end
|
|
1198
|
+
if t == "NilNode"
|
|
1199
|
+
return "NilClass"
|
|
1200
|
+
end
|
|
1201
|
+
""
|
|
1202
|
+
end
|
|
1203
|
+
|
|
1204
|
+
def is_builtin_class_const(name)
|
|
1205
|
+
builtins = "Integer;Float;String;Symbol;Array;Hash;Object;BasicObject;Numeric;Regexp;Range;Proc;Exception;StandardError;Comparable;Enumerable;Kernel;Module;Class".split(";", -1)
|
|
1206
|
+
if not_in(name, builtins) == 0
|
|
1207
|
+
return 1
|
|
1208
|
+
end
|
|
1209
|
+
0
|
|
1210
|
+
end
|
|
1211
|
+
|
|
1212
|
+
# Resolve a constant's RHS value-node to the class name it aliases, or
|
|
1213
|
+
# "" when it isn't a class alias.
|
|
1214
|
+
def class_alias_target(rhs, class_names)
|
|
1215
|
+
if rhs < 0
|
|
1216
|
+
return ""
|
|
1217
|
+
end
|
|
1218
|
+
t = @nd_type[rhs]
|
|
1219
|
+
if t == "ConstantReadNode"
|
|
1220
|
+
nm = @nd_name[rhs]
|
|
1221
|
+
if not_in(nm, class_names) == 0 || is_builtin_class_const(nm) == 1
|
|
1222
|
+
return nm
|
|
1223
|
+
end
|
|
1224
|
+
return ""
|
|
1225
|
+
end
|
|
1226
|
+
if t == "CallNode" && @nd_name[rhs] == "class"
|
|
1227
|
+
recv = @nd_receiver[rhs]
|
|
1228
|
+
if recv < 0
|
|
1229
|
+
return ""
|
|
1230
|
+
end
|
|
1231
|
+
lc = literal_class_name(recv)
|
|
1232
|
+
if lc != ""
|
|
1233
|
+
return lc
|
|
1234
|
+
end
|
|
1235
|
+
if @nd_type[recv] == "ConstantReadNode"
|
|
1236
|
+
rnm = @nd_name[recv]
|
|
1237
|
+
if not_in(rnm, class_names) == 0 || is_builtin_class_const(rnm) == 1
|
|
1238
|
+
return rnm
|
|
1239
|
+
end
|
|
1240
|
+
end
|
|
1241
|
+
end
|
|
1242
|
+
""
|
|
1243
|
+
end
|
|
1244
|
+
|
|
1245
|
+
def build_class_alias_map(nid, class_names, amap_from, amap_to)
|
|
1246
|
+
if nid < 0
|
|
1247
|
+
return
|
|
1248
|
+
end
|
|
1249
|
+
if @nd_type[nid] == "ConstantWriteNode"
|
|
1250
|
+
cname = @nd_name[nid]
|
|
1251
|
+
tgt = class_alias_target(@nd_expression[nid], class_names)
|
|
1252
|
+
# Only treat it as a class alias when it resolves to a DIFFERENT
|
|
1253
|
+
# name (`Foo = Foo` / a class's own const are not aliases) and isn't
|
|
1254
|
+
# already recorded.
|
|
1255
|
+
if tgt != "" && tgt != cname && not_in(cname, amap_from) == 1
|
|
1256
|
+
amap_from.push(cname)
|
|
1257
|
+
amap_to.push(tgt)
|
|
1258
|
+
end
|
|
1259
|
+
end
|
|
1260
|
+
kids = []
|
|
1261
|
+
push_child_ids(nid, kids)
|
|
1262
|
+
k = 0
|
|
1263
|
+
while k < kids.length
|
|
1264
|
+
build_class_alias_map(kids[k], class_names, amap_from, amap_to)
|
|
1265
|
+
k = k + 1
|
|
1266
|
+
end
|
|
1267
|
+
end
|
|
1268
|
+
|
|
1269
|
+
def rewrite_class_alias_refs(nid, amap_from, amap_to)
|
|
1270
|
+
if nid < 0
|
|
1271
|
+
return
|
|
1272
|
+
end
|
|
1273
|
+
if @nd_type[nid] == "ClassNode"
|
|
1274
|
+
cp = @nd_constant_path[nid]
|
|
1275
|
+
if cp >= 0 && @nd_type[cp] == "ConstantReadNode"
|
|
1276
|
+
nm = @nd_name[cp]
|
|
1277
|
+
ai = 0
|
|
1278
|
+
while ai < amap_from.length
|
|
1279
|
+
if amap_from[ai] == nm
|
|
1280
|
+
set_string_field(cp, "name", amap_to[ai])
|
|
1281
|
+
ai = amap_from.length
|
|
1282
|
+
end
|
|
1283
|
+
ai = ai + 1
|
|
1284
|
+
end
|
|
1285
|
+
end
|
|
1286
|
+
end
|
|
1287
|
+
kids = []
|
|
1288
|
+
push_child_ids(nid, kids)
|
|
1289
|
+
k = 0
|
|
1290
|
+
while k < kids.length
|
|
1291
|
+
rewrite_class_alias_refs(kids[k], amap_from, amap_to)
|
|
1292
|
+
k = k + 1
|
|
1293
|
+
end
|
|
1294
|
+
end
|
|
1295
|
+
|
|
1296
|
+
# ---- Module#instance_methods(false) const-fold support ----
|
|
1297
|
+
# `Klass.instance_methods(false)` reports a class/module's own (non-
|
|
1298
|
+
# inherited) instance-method names. For a *compiled* user class/module
|
|
1299
|
+
# that set is statically known, so the call folds to a literal symbol
|
|
1300
|
+
# array. These helpers are shared so the analyze pass (symbol-table
|
|
1301
|
+
# registration + result typing) and the codegen pass (the fold) agree
|
|
1302
|
+
# exactly -- a name set or gate that drifted between passes would emit
|
|
1303
|
+
# a `sym_array`-typed slot the other side can't populate.
|
|
1304
|
+
|
|
1305
|
+
# Resolved const name iff `nid` is a foldable
|
|
1306
|
+
# `<ConstantRead>.instance_methods(false)` call, else "". Receiver
|
|
1307
|
+
# resolution is context-free (the raw constant name) on purpose: the
|
|
1308
|
+
# gate must be identical in a flat symbol-collection walk and in a
|
|
1309
|
+
# class-scoped emit, so it deliberately does NOT consult lexical
|
|
1310
|
+
# scope. ConstantPath receivers and the no-arg / `true` forms fall
|
|
1311
|
+
# through unfolded (and stay untyped), matching today's behaviour.
|
|
1312
|
+
def instance_methods_fold_target(nid)
|
|
1313
|
+
recv = @nd_receiver[nid]
|
|
1314
|
+
if recv < 0 || @nd_type[recv] != "ConstantReadNode"
|
|
1315
|
+
return ""
|
|
1316
|
+
end
|
|
1317
|
+
aid = @nd_arguments[nid]
|
|
1318
|
+
if aid < 0
|
|
1319
|
+
return ""
|
|
1320
|
+
end
|
|
1321
|
+
aargs = get_args(aid)
|
|
1322
|
+
if aargs.length != 1 || @nd_type[aargs[0]] != "FalseNode"
|
|
1323
|
+
return ""
|
|
1324
|
+
end
|
|
1325
|
+
cn = @nd_name[recv]
|
|
1326
|
+
if instance_methods_fold_const?(cn) == 0
|
|
1327
|
+
return ""
|
|
1328
|
+
end
|
|
1329
|
+
cn
|
|
1330
|
+
end
|
|
1331
|
+
|
|
1332
|
+
# 1 iff `cname` is a user-defined class or module whose own instance-
|
|
1333
|
+
# method set is statically known. Built-in classes (Integer, String,
|
|
1334
|
+
# ...) aren't in @cls_names, so they fall through -- spinel can't
|
|
1335
|
+
# enumerate their native method tables.
|
|
1336
|
+
def instance_methods_fold_const?(cname)
|
|
1337
|
+
if cname == ""
|
|
1338
|
+
return 0
|
|
1339
|
+
end
|
|
1340
|
+
if find_class_idx(cname) >= 0
|
|
1341
|
+
return 1
|
|
1342
|
+
end
|
|
1343
|
+
mi = 0
|
|
1344
|
+
while mi < @module_names.length
|
|
1345
|
+
if @module_names[mi] == cname
|
|
1346
|
+
return 1
|
|
1347
|
+
end
|
|
1348
|
+
mi = mi + 1
|
|
1349
|
+
end
|
|
1350
|
+
0
|
|
1351
|
+
end
|
|
1352
|
+
|
|
1353
|
+
# Ordered, de-duplicated own instance-method names (as strings) for a
|
|
1354
|
+
# foldable const. Class: attr readers + `=`-suffixed writers + method
|
|
1355
|
+
# table (matches class_has_method_local, which method_defined? uses).
|
|
1356
|
+
# Module: body `def`s excluding `def self.x` and module_function
|
|
1357
|
+
# promotions, plus attr accessors. spinel doesn't model visibility, so
|
|
1358
|
+
# private defs are included -- consistent with method_defined?.
|
|
1359
|
+
def instance_methods_own_names(cname)
|
|
1360
|
+
acc = "".split(";", -1)
|
|
1361
|
+
ci = find_class_idx(cname)
|
|
1362
|
+
if ci >= 0
|
|
1363
|
+
im_push_names(acc, @cls_attr_readers[ci].split(";", -1), "")
|
|
1364
|
+
im_push_names(acc, @cls_attr_writers[ci].split(";", -1), "=")
|
|
1365
|
+
im_push_names(acc, @cls_meth_names[ci].split(";", -1), "")
|
|
1366
|
+
return acc
|
|
1367
|
+
end
|
|
1368
|
+
mi = 0
|
|
1369
|
+
while mi < @module_names.length
|
|
1370
|
+
if @module_names[mi] == cname && mi < @module_body_ids.length
|
|
1371
|
+
im_push_module_body(acc, @module_body_ids[mi])
|
|
1372
|
+
end
|
|
1373
|
+
mi = mi + 1
|
|
1374
|
+
end
|
|
1375
|
+
acc
|
|
1376
|
+
end
|
|
1377
|
+
|
|
1378
|
+
# Backing ivar base-name for an attr_reader. For a normal reader this
|
|
1379
|
+
# is the reader name itself; for a reader created by `alias new old`
|
|
1380
|
+
# (or `alias_method :new, :old`) where `old` is an attr_reader, it is
|
|
1381
|
+
# `old`'s backing ivar so `obj.new` reads the source slot rather than a
|
|
1382
|
+
# nonexistent `@new`. Walks the parent chain like cls_has_attr_reader.
|
|
1383
|
+
# The identity default keeps every non-aliased reader unchanged, so
|
|
1384
|
+
# this is purely additive for code that doesn't alias accessors.
|
|
1385
|
+
def attr_reader_ivar(ci, mname)
|
|
1386
|
+
if ci < 0
|
|
1387
|
+
return mname
|
|
1388
|
+
end
|
|
1389
|
+
key = @cls_names[ci] + "#" + mname
|
|
1390
|
+
i = 0
|
|
1391
|
+
while i < @attr_alias_keys.length
|
|
1392
|
+
if @attr_alias_keys[i] == key
|
|
1393
|
+
return @attr_alias_ivars[i]
|
|
1394
|
+
end
|
|
1395
|
+
i = i + 1
|
|
1396
|
+
end
|
|
1397
|
+
# If `ci` declares this reader directly (a plain attr_reader, not via
|
|
1398
|
+
# the parent), its backing ivar is the reader name itself — a subclass
|
|
1399
|
+
# redeclaring a name must not inherit a parent's alias backing.
|
|
1400
|
+
own = @cls_attr_readers[ci].split(";", -1)
|
|
1401
|
+
di = 0
|
|
1402
|
+
while di < own.length
|
|
1403
|
+
if own[di] == mname
|
|
1404
|
+
return mname
|
|
1405
|
+
end
|
|
1406
|
+
di = di + 1
|
|
1407
|
+
end
|
|
1408
|
+
if @cls_parents[ci] != ""
|
|
1409
|
+
pi = find_class_idx(@cls_parents[ci])
|
|
1410
|
+
if pi >= 0
|
|
1411
|
+
return attr_reader_ivar(pi, mname)
|
|
1412
|
+
end
|
|
1413
|
+
end
|
|
1414
|
+
mname
|
|
1415
|
+
end
|
|
1416
|
+
|
|
1417
|
+
def im_push_names(acc, names, suffix)
|
|
1418
|
+
k = 0
|
|
1419
|
+
while k < names.length
|
|
1420
|
+
if names[k] != ""
|
|
1421
|
+
full = names[k] + suffix
|
|
1422
|
+
if not_in(full, acc) == 1
|
|
1423
|
+
acc.push(full)
|
|
1424
|
+
end
|
|
1425
|
+
end
|
|
1426
|
+
k = k + 1
|
|
1427
|
+
end
|
|
1428
|
+
end
|
|
1429
|
+
|
|
1430
|
+
def im_push_module_body(acc, body)
|
|
1431
|
+
if body < 0
|
|
1432
|
+
return
|
|
1433
|
+
end
|
|
1434
|
+
stmts = get_stmts(body)
|
|
1435
|
+
# Pre-scan `module_function :a, :b` named promotions: those defs
|
|
1436
|
+
# become class methods, not instance methods.
|
|
1437
|
+
mf_named = "".split(";", -1)
|
|
1438
|
+
si = 0
|
|
1439
|
+
while si < stmts.length
|
|
1440
|
+
sid = stmts[si]
|
|
1441
|
+
if @nd_type[sid] == "CallNode" && @nd_receiver[sid] < 0 && @nd_name[sid] == "module_function"
|
|
1442
|
+
aid = @nd_arguments[sid]
|
|
1443
|
+
if aid >= 0
|
|
1444
|
+
margs = get_args(aid)
|
|
1445
|
+
mk = 0
|
|
1446
|
+
while mk < margs.length
|
|
1447
|
+
if @nd_type[margs[mk]] == "SymbolNode" || @nd_type[margs[mk]] == "StringNode"
|
|
1448
|
+
mf_named.push(@nd_content[margs[mk]])
|
|
1449
|
+
end
|
|
1450
|
+
mk = mk + 1
|
|
1451
|
+
end
|
|
1452
|
+
end
|
|
1453
|
+
end
|
|
1454
|
+
si = si + 1
|
|
1455
|
+
end
|
|
1456
|
+
# `module_function` (no args) flips subsequent bare `def`s into
|
|
1457
|
+
# class methods. `def self.x` is always a class method.
|
|
1458
|
+
in_mf = 0
|
|
1459
|
+
si = 0
|
|
1460
|
+
while si < stmts.length
|
|
1461
|
+
sid = stmts[si]
|
|
1462
|
+
t = @nd_type[sid]
|
|
1463
|
+
if t == "CallNode" && @nd_receiver[sid] < 0
|
|
1464
|
+
cn = @nd_name[sid]
|
|
1465
|
+
if cn == "module_function"
|
|
1466
|
+
aid2 = @nd_arguments[sid]
|
|
1467
|
+
if aid2 < 0 || get_args(aid2).length == 0
|
|
1468
|
+
in_mf = 1
|
|
1469
|
+
end
|
|
1470
|
+
end
|
|
1471
|
+
if cn == "attr_reader" || cn == "attr_accessor"
|
|
1472
|
+
im_push_attr_args(acc, sid, "")
|
|
1473
|
+
end
|
|
1474
|
+
if cn == "attr_writer" || cn == "attr_accessor"
|
|
1475
|
+
im_push_attr_args(acc, sid, "=")
|
|
1476
|
+
end
|
|
1477
|
+
end
|
|
1478
|
+
if t == "DefNode" && @nd_receiver[sid] < 0 && in_mf == 0
|
|
1479
|
+
dn = @nd_name[sid]
|
|
1480
|
+
if not_in(dn, mf_named) == 1 && not_in(dn, acc) == 1
|
|
1481
|
+
acc.push(dn)
|
|
1482
|
+
end
|
|
1483
|
+
end
|
|
1484
|
+
si = si + 1
|
|
1485
|
+
end
|
|
1486
|
+
end
|
|
1487
|
+
|
|
1488
|
+
def im_push_attr_args(acc, sid, suffix)
|
|
1489
|
+
aid = @nd_arguments[sid]
|
|
1490
|
+
if aid < 0
|
|
1491
|
+
return
|
|
1492
|
+
end
|
|
1493
|
+
aargs = get_args(aid)
|
|
1494
|
+
k = 0
|
|
1495
|
+
while k < aargs.length
|
|
1496
|
+
if @nd_type[aargs[k]] == "SymbolNode" || @nd_type[aargs[k]] == "StringNode"
|
|
1497
|
+
full = @nd_content[aargs[k]] + suffix
|
|
1498
|
+
if not_in(full, acc) == 1
|
|
1499
|
+
acc.push(full)
|
|
1500
|
+
end
|
|
1501
|
+
end
|
|
1502
|
+
k = k + 1
|
|
1503
|
+
end
|
|
1504
|
+
end
|
|
1505
|
+
|
|
1506
|
+
end
|