rubyduino 0.1.3 → 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 +12 -0
- data/README.md +1 -2
- data/examples/hc_sr04.rb +39 -0
- data/lib/rubyduino/arduino_uno.rb +76 -0
- data/lib/rubyduino/sp_runtime.h +287 -0
- data/lib/rubyduino/spinel.rb +1 -1
- data/lib/rubyduino/spinel_arduino_codegen.rb +53 -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 +1326 -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
|
@@ -20,31 +20,64 @@
|
|
|
20
20
|
#include <stdlib.h>
|
|
21
21
|
#include <string.h>
|
|
22
22
|
#include <stdarg.h>
|
|
23
|
+
#include <limits.h>
|
|
23
24
|
#include <prism.h>
|
|
24
25
|
|
|
25
26
|
/* ---- Output buffer ---- */
|
|
26
27
|
static char **lines;
|
|
27
|
-
static
|
|
28
|
-
static
|
|
28
|
+
static size_t line_count;
|
|
29
|
+
static size_t line_cap;
|
|
29
30
|
static int node_counter;
|
|
30
31
|
|
|
31
32
|
static void out_add(const char *fmt, ...) {
|
|
32
33
|
va_list ap;
|
|
33
34
|
va_start(ap, fmt);
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
va_list ap2;
|
|
36
|
+
va_copy(ap2, ap);
|
|
37
|
+
int needed = vsnprintf(NULL, 0, fmt, ap);
|
|
36
38
|
va_end(ap);
|
|
39
|
+
if (needed < 0) {
|
|
40
|
+
va_end(ap2);
|
|
41
|
+
fprintf(stderr, "spinel_parse: vsnprintf failed\n");
|
|
42
|
+
exit(1);
|
|
43
|
+
}
|
|
44
|
+
char *buf = malloc((size_t)needed + 1);
|
|
45
|
+
if (!buf) {
|
|
46
|
+
va_end(ap2);
|
|
47
|
+
fprintf(stderr, "spinel_parse: out of memory\n");
|
|
48
|
+
exit(1);
|
|
49
|
+
}
|
|
50
|
+
vsnprintf(buf, (size_t)needed + 1, fmt, ap2);
|
|
51
|
+
va_end(ap2);
|
|
37
52
|
if (line_count >= line_cap) {
|
|
38
|
-
line_cap
|
|
39
|
-
|
|
53
|
+
if (line_cap > (((size_t)-1) - 256) / 2) {
|
|
54
|
+
fprintf(stderr, "spinel_parse: out of memory\n");
|
|
55
|
+
exit(1);
|
|
56
|
+
}
|
|
57
|
+
size_t new_cap = line_cap * 2 + 256;
|
|
58
|
+
char **new_lines = realloc(lines, sizeof(char *) * new_cap);
|
|
59
|
+
if (!new_lines) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
60
|
+
lines = new_lines;
|
|
61
|
+
line_cap = new_cap;
|
|
40
62
|
}
|
|
41
|
-
lines[line_count++] =
|
|
63
|
+
lines[line_count++] = buf;
|
|
42
64
|
}
|
|
43
65
|
|
|
44
66
|
/* ---- Name from constant pool ---- */
|
|
45
67
|
static const pm_parser_t *g_parser;
|
|
46
68
|
static const char *g_source_file = "";
|
|
47
69
|
static char *g_source_file_escaped = NULL; /* escape_str(g_source_file), set once at init */
|
|
70
|
+
/* Debug builds: when SPINEL_DEBUG=1, flatten() emits a per-node
|
|
71
|
+
`node_line` field so codegen can place C `#line` directives. Off by
|
|
72
|
+
default so the AST text format (and golden tests) are unchanged. */
|
|
73
|
+
static int g_emit_line = 0;
|
|
74
|
+
/* Debug multi-file source map, populated by sp_build_line_map() before
|
|
75
|
+
flatten() runs and read in flatten() to attribute each node to its
|
|
76
|
+
original file/line. Declared here because flatten() precedes the
|
|
77
|
+
require-resolution machinery that defines the builder. */
|
|
78
|
+
static int *sp_line_file = NULL; /* buffer line (1-based) -> file id */
|
|
79
|
+
static int *sp_line_orig = NULL; /* buffer line (1-based) -> original line */
|
|
80
|
+
static int sp_line_map_n = 0;
|
|
48
81
|
|
|
49
82
|
static char *cstr(pm_constant_id_t id) {
|
|
50
83
|
if (id == 0) return strdup("");
|
|
@@ -67,6 +100,11 @@ static char *escape_str(const uint8_t *src, size_t len) {
|
|
|
67
100
|
else if (c == '\r') { out[j++]='%'; out[j++]='0'; out[j++]='D'; }
|
|
68
101
|
else if (c == '\t') { out[j++]='%'; out[j++]='0'; out[j++]='9'; }
|
|
69
102
|
else if (c == ' ') { out[j++]='%'; out[j++]='2'; out[j++]='0'; }
|
|
103
|
+
/* Issue #722: NUL byte inside a string literal would truncate
|
|
104
|
+
the field at the AST text-serialization layer (lines split
|
|
105
|
+
on '\n' and the loader uses strlen on fields). Encode as %00
|
|
106
|
+
so the byte survives the round-trip. */
|
|
107
|
+
else if (c == 0) { out[j++]='%'; out[j++]='0'; out[j++]='0'; }
|
|
70
108
|
else out[j++] = c;
|
|
71
109
|
}
|
|
72
110
|
out[j] = '\0';
|
|
@@ -107,11 +145,21 @@ static void emit_int(int id, const char *field, long long val) {
|
|
|
107
145
|
}
|
|
108
146
|
|
|
109
147
|
static void emit_float(int id, const char *field, double val) {
|
|
148
|
+
/* Issue #766: 64-byte buf; "%.17g" produces at most 24 chars, plus
|
|
149
|
+
".0" trailer = 26. Safe by margin.
|
|
150
|
+
Issue #767: snprintf is locale-sensitive (de_DE produces "3,14"
|
|
151
|
+
for 3.14, which then fails to parse as a C float literal).
|
|
152
|
+
Format into a fresh sprintf via the C locale by using a manual
|
|
153
|
+
dot conversion: produce in current locale then replace ',' -> '.'.
|
|
154
|
+
The lib-side replacement is safe because Ruby float literals never
|
|
155
|
+
contain a comma. */
|
|
110
156
|
char buf[64];
|
|
111
157
|
snprintf(buf, sizeof(buf), "%.17g", val);
|
|
112
|
-
|
|
113
|
-
if (!strchr(buf, '.') && !strchr(buf, 'e') && !strchr(buf, 'E'))
|
|
114
|
-
|
|
158
|
+
for (char *p = buf; *p; p++) if (*p == ',') *p = '.';
|
|
159
|
+
if (!strchr(buf, '.') && !strchr(buf, 'e') && !strchr(buf, 'E')) {
|
|
160
|
+
size_t l = strlen(buf);
|
|
161
|
+
if (l + 3 < sizeof(buf)) strcat(buf, ".0");
|
|
162
|
+
}
|
|
115
163
|
out_add("F %d %s %s", id, field, buf);
|
|
116
164
|
}
|
|
117
165
|
|
|
@@ -128,30 +176,60 @@ static void emit_node_array(int id, const char *field, pm_node_list_t *list) {
|
|
|
128
176
|
int *ids = malloc(sizeof(int) * list->size);
|
|
129
177
|
for (size_t i = 0; i < list->size; i++)
|
|
130
178
|
ids[i] = flatten(list->nodes[i]);
|
|
131
|
-
/*
|
|
132
|
-
|
|
133
|
-
|
|
179
|
+
/* Issue #744: build comma-separated string into a growable buffer.
|
|
180
|
+
Previously a fixed 65536-byte stack buffer overflowed on
|
|
181
|
+
20k+-element arrays -- snprintf returns the bytes it WOULD have
|
|
182
|
+
written, advancing pos past the end and corrupting the stack. */
|
|
183
|
+
size_t cap = 1024;
|
|
184
|
+
char *buf = malloc(cap);
|
|
185
|
+
size_t pos = 0;
|
|
134
186
|
for (size_t i = 0; i < list->size; i++) {
|
|
187
|
+
/* worst case per iter: ", -2147483648\0" -> 14 bytes; reserve 16 to be safe */
|
|
188
|
+
if (pos + 16 >= cap) {
|
|
189
|
+
size_t new_cap = cap * 2 + 16;
|
|
190
|
+
char *nb = realloc(buf, new_cap);
|
|
191
|
+
if (!nb) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
192
|
+
buf = nb;
|
|
193
|
+
cap = new_cap;
|
|
194
|
+
}
|
|
135
195
|
if (i > 0) buf[pos++] = ',';
|
|
136
|
-
|
|
196
|
+
int n = snprintf(buf + pos, cap - pos, "%d", ids[i]);
|
|
197
|
+
if (n > 0) pos += (size_t)n;
|
|
137
198
|
}
|
|
138
199
|
buf[pos] = '\0';
|
|
139
200
|
out_add("A %d %s %s", id, field, buf);
|
|
201
|
+
free(buf);
|
|
140
202
|
free(ids);
|
|
141
203
|
}
|
|
142
204
|
|
|
143
205
|
/* ---- Integer value extraction ---- */
|
|
144
206
|
static long long pm_int_value(pm_integer_t *integer) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
207
|
+
uint64_t val = 0;
|
|
208
|
+
uint64_t max_positive = (uint64_t)LLONG_MAX;
|
|
209
|
+
uint64_t max_negative = max_positive + 1ULL;
|
|
210
|
+
const size_t limb_bits = 32;
|
|
211
|
+
const size_t value_bits = sizeof(val) * CHAR_BIT;
|
|
212
|
+
int overflow = 0;
|
|
213
|
+
|
|
214
|
+
if (integer->values == NULL) {
|
|
215
|
+
val = (uint64_t)integer->value;
|
|
148
216
|
} else {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
217
|
+
for (size_t i = 0; i < integer->length; i++) {
|
|
218
|
+
if (i >= value_bits / limb_bits) {
|
|
219
|
+
if (integer->values[i] != 0) overflow = 1;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
size_t shift = i * limb_bits;
|
|
223
|
+
val |= ((uint64_t)integer->values[i]) << shift;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (integer->negative) {
|
|
228
|
+
if (overflow || val >= max_negative) return LLONG_MIN;
|
|
229
|
+
return -(long long)val;
|
|
152
230
|
}
|
|
153
|
-
if (
|
|
154
|
-
return val;
|
|
231
|
+
if (overflow || val > max_positive) return LLONG_MAX;
|
|
232
|
+
return (long long)val;
|
|
155
233
|
}
|
|
156
234
|
|
|
157
235
|
/* ---- Main flattening ---- */
|
|
@@ -161,6 +239,30 @@ static int flatten(pm_node_t *node) {
|
|
|
161
239
|
int id = node_counter++;
|
|
162
240
|
pm_node_type_t t = PM_NODE_TYPE(node);
|
|
163
241
|
|
|
242
|
+
/* Debug builds only: stamp every node with its source line — and, when a
|
|
243
|
+
multi-file map was built, its original file — so codegen can emit
|
|
244
|
+
`#line N "file"` directives. Written to dedicated `node_line` /
|
|
245
|
+
`node_file` fields (NOT the overloaded `value`/`start_line` slot). The
|
|
246
|
+
raw value is the line in the concatenated buffer; the map translates it
|
|
247
|
+
back to the original file and line. */
|
|
248
|
+
if (g_emit_line) {
|
|
249
|
+
pm_line_column_t lc = pm_newline_list_line_column(&g_parser->newline_list,
|
|
250
|
+
node->location.start,
|
|
251
|
+
g_parser->start_line);
|
|
252
|
+
int32_t bl = lc.line;
|
|
253
|
+
int orig = bl;
|
|
254
|
+
int fid = 0;
|
|
255
|
+
if (sp_line_map_n > 0 && bl >= 1 && bl <= sp_line_map_n) {
|
|
256
|
+
orig = sp_line_orig[bl];
|
|
257
|
+
fid = sp_line_file[bl];
|
|
258
|
+
}
|
|
259
|
+
emit_int(id, "node_line", (long long)orig);
|
|
260
|
+
emit_int(id, "node_file", (long long)fid);
|
|
261
|
+
/* Column is concatenation-stable (require splicing is line-based), so the
|
|
262
|
+
buffer column equals the original-file column. 0-based, as Prism gives. */
|
|
263
|
+
emit_int(id, "node_col", (long long)lc.column);
|
|
264
|
+
}
|
|
265
|
+
|
|
164
266
|
#define N(type_name) out_add("N %d " type_name, id)
|
|
165
267
|
#define S(field, val) do { char *_e = (val); emit_str(id, field, _e); free(_e); } while(0)
|
|
166
268
|
#define I(field, val) emit_int(id, field, val)
|
|
@@ -227,8 +329,12 @@ static int flatten(pm_node_t *node) {
|
|
|
227
329
|
R("receiver", n->receiver);
|
|
228
330
|
R("arguments", n->arguments);
|
|
229
331
|
R("block", n->block);
|
|
332
|
+
/* Issue #793: emit explicit call_operator for non-safe-nav calls
|
|
333
|
+
too, so codegen reads "." instead of an unset field. */
|
|
230
334
|
if (PM_NODE_FLAG_P(node, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
|
|
231
335
|
S("call_operator", escape_str((const uint8_t *)"&.", 2));
|
|
336
|
+
} else {
|
|
337
|
+
S("call_operator", escape_str((const uint8_t *)".", 1));
|
|
232
338
|
}
|
|
233
339
|
break;
|
|
234
340
|
}
|
|
@@ -246,6 +352,50 @@ static int flatten(pm_node_t *node) {
|
|
|
246
352
|
R("target", n->target);
|
|
247
353
|
break;
|
|
248
354
|
}
|
|
355
|
+
case PM_CONSTANT_OPERATOR_WRITE_NODE: {
|
|
356
|
+
pm_constant_operator_write_node_t *n = (pm_constant_operator_write_node_t *)node;
|
|
357
|
+
N("ConstantOperatorWriteNode");
|
|
358
|
+
NAME("name", n->name);
|
|
359
|
+
NAME("binary_operator", n->binary_operator);
|
|
360
|
+
R("value", n->value);
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
case PM_CONSTANT_OR_WRITE_NODE: {
|
|
364
|
+
pm_constant_or_write_node_t *n = (pm_constant_or_write_node_t *)node;
|
|
365
|
+
N("ConstantOrWriteNode");
|
|
366
|
+
NAME("name", n->name);
|
|
367
|
+
R("value", n->value);
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
case PM_CONSTANT_AND_WRITE_NODE: {
|
|
371
|
+
pm_constant_and_write_node_t *n = (pm_constant_and_write_node_t *)node;
|
|
372
|
+
N("ConstantAndWriteNode");
|
|
373
|
+
NAME("name", n->name);
|
|
374
|
+
R("value", n->value);
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
|
|
378
|
+
pm_constant_path_operator_write_node_t *n = (pm_constant_path_operator_write_node_t *)node;
|
|
379
|
+
N("ConstantPathOperatorWriteNode");
|
|
380
|
+
NAME("binary_operator", n->binary_operator);
|
|
381
|
+
R("value", n->value);
|
|
382
|
+
R("target", (pm_node_t *)n->target);
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
case PM_CONSTANT_PATH_OR_WRITE_NODE: {
|
|
386
|
+
pm_constant_path_or_write_node_t *n = (pm_constant_path_or_write_node_t *)node;
|
|
387
|
+
N("ConstantPathOrWriteNode");
|
|
388
|
+
R("value", n->value);
|
|
389
|
+
R("target", (pm_node_t *)n->target);
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
case PM_CONSTANT_PATH_AND_WRITE_NODE: {
|
|
393
|
+
pm_constant_path_and_write_node_t *n = (pm_constant_path_and_write_node_t *)node;
|
|
394
|
+
N("ConstantPathAndWriteNode");
|
|
395
|
+
R("value", n->value);
|
|
396
|
+
R("target", (pm_node_t *)n->target);
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
249
399
|
case PM_CONSTANT_READ_NODE: {
|
|
250
400
|
pm_constant_read_node_t *n = (pm_constant_read_node_t *)node;
|
|
251
401
|
N("ConstantReadNode");
|
|
@@ -332,6 +482,19 @@ static int flatten(pm_node_t *node) {
|
|
|
332
482
|
NAME("name", n->name);
|
|
333
483
|
break;
|
|
334
484
|
}
|
|
485
|
+
case PM_CLASS_VARIABLE_TARGET_NODE: {
|
|
486
|
+
pm_class_variable_target_node_t *n = (pm_class_variable_target_node_t *)node;
|
|
487
|
+
N("ClassVariableTargetNode");
|
|
488
|
+
NAME("name", n->name);
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
case PM_CONSTANT_PATH_TARGET_NODE: {
|
|
492
|
+
pm_constant_path_target_node_t *n = (pm_constant_path_target_node_t *)node;
|
|
493
|
+
N("ConstantPathTargetNode");
|
|
494
|
+
R("parent", n->parent);
|
|
495
|
+
NAME("name", n->name);
|
|
496
|
+
break;
|
|
497
|
+
}
|
|
335
498
|
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
|
|
336
499
|
pm_instance_variable_and_write_node_t *n = (pm_instance_variable_and_write_node_t *)node;
|
|
337
500
|
N("InstanceVariableAndWriteNode");
|
|
@@ -367,6 +530,28 @@ static int flatten(pm_node_t *node) {
|
|
|
367
530
|
NAME("name", n->name);
|
|
368
531
|
break;
|
|
369
532
|
}
|
|
533
|
+
case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
|
|
534
|
+
pm_class_variable_operator_write_node_t *n = (pm_class_variable_operator_write_node_t *)node;
|
|
535
|
+
N("ClassVariableOperatorWriteNode");
|
|
536
|
+
NAME("name", n->name);
|
|
537
|
+
NAME("binary_operator", n->binary_operator);
|
|
538
|
+
R("value", n->value);
|
|
539
|
+
break;
|
|
540
|
+
}
|
|
541
|
+
case PM_CLASS_VARIABLE_OR_WRITE_NODE: {
|
|
542
|
+
pm_class_variable_or_write_node_t *n = (pm_class_variable_or_write_node_t *)node;
|
|
543
|
+
N("ClassVariableOrWriteNode");
|
|
544
|
+
NAME("name", n->name);
|
|
545
|
+
R("value", n->value);
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
case PM_CLASS_VARIABLE_AND_WRITE_NODE: {
|
|
549
|
+
pm_class_variable_and_write_node_t *n = (pm_class_variable_and_write_node_t *)node;
|
|
550
|
+
N("ClassVariableAndWriteNode");
|
|
551
|
+
NAME("name", n->name);
|
|
552
|
+
R("value", n->value);
|
|
553
|
+
break;
|
|
554
|
+
}
|
|
370
555
|
case PM_INDEX_OPERATOR_WRITE_NODE: {
|
|
371
556
|
pm_index_operator_write_node_t *n = (pm_index_operator_write_node_t *)node;
|
|
372
557
|
N("IndexOperatorWriteNode");
|
|
@@ -496,6 +681,29 @@ static int flatten(pm_node_t *node) {
|
|
|
496
681
|
F("value", n->value);
|
|
497
682
|
break;
|
|
498
683
|
}
|
|
684
|
+
case PM_IMAGINARY_NODE: {
|
|
685
|
+
/* `2i` -- imaginary numeric. Issue #840. Wraps an inner
|
|
686
|
+
IntegerNode or FloatNode in `numeric`. Codegen surfaces this
|
|
687
|
+
as a sp_Complex literal {re=0, im=numeric}. */
|
|
688
|
+
pm_imaginary_node_t *n = (pm_imaginary_node_t *)node;
|
|
689
|
+
N("ImaginaryNode");
|
|
690
|
+
R("numeric", n->numeric);
|
|
691
|
+
break;
|
|
692
|
+
}
|
|
693
|
+
case PM_RATIONAL_NODE: {
|
|
694
|
+
/* `1/2r` or `1.5r` -- rational literal. Issue #841. Emits
|
|
695
|
+
numerator + denominator as decimal-text fields (loader pins
|
|
696
|
+
them in @nd_rat_num / @nd_rat_den). Prism stores both as
|
|
697
|
+
reduced pm_integer_t. */
|
|
698
|
+
pm_rational_node_t *n = (pm_rational_node_t *)node;
|
|
699
|
+
N("RationalNode");
|
|
700
|
+
char nbuf[32];
|
|
701
|
+
snprintf(nbuf, sizeof(nbuf), "%lld", (long long)pm_int_value(&n->numerator));
|
|
702
|
+
emit_str(id, "rat_num", nbuf);
|
|
703
|
+
snprintf(nbuf, sizeof(nbuf), "%lld", (long long)pm_int_value(&n->denominator));
|
|
704
|
+
emit_str(id, "rat_den", nbuf);
|
|
705
|
+
break;
|
|
706
|
+
}
|
|
499
707
|
case PM_STRING_NODE: {
|
|
500
708
|
pm_string_node_t *n = (pm_string_node_t *)node;
|
|
501
709
|
N("StringNode");
|
|
@@ -687,12 +895,18 @@ static int flatten(pm_node_t *node) {
|
|
|
687
895
|
R("arguments", n->arguments);
|
|
688
896
|
break;
|
|
689
897
|
}
|
|
690
|
-
case PM_BREAK_NODE:
|
|
898
|
+
case PM_BREAK_NODE: {
|
|
899
|
+
pm_break_node_t *n = (pm_break_node_t *)node;
|
|
691
900
|
N("BreakNode");
|
|
901
|
+
R("arguments", n->arguments);
|
|
692
902
|
break;
|
|
693
|
-
|
|
903
|
+
}
|
|
904
|
+
case PM_NEXT_NODE: {
|
|
905
|
+
pm_next_node_t *n = (pm_next_node_t *)node;
|
|
694
906
|
N("NextNode");
|
|
907
|
+
R("arguments", n->arguments);
|
|
695
908
|
break;
|
|
909
|
+
}
|
|
696
910
|
case PM_RETRY_NODE:
|
|
697
911
|
N("RetryNode");
|
|
698
912
|
break;
|
|
@@ -847,9 +1061,8 @@ static int flatten(pm_node_t *node) {
|
|
|
847
1061
|
break;
|
|
848
1062
|
}
|
|
849
1063
|
case PM_SOURCE_ENCODING_NODE: {
|
|
850
|
-
/* `__ENCODING__`.
|
|
851
|
-
|
|
852
|
-
frozen string. All Spinel sources are UTF-8. */
|
|
1064
|
+
/* `__ENCODING__`. Spinel sources are UTF-8; codegen returns a
|
|
1065
|
+
small Encoding value for Ruby-compatible `.class` / `.name`. */
|
|
853
1066
|
N("SourceEncodingNode");
|
|
854
1067
|
break;
|
|
855
1068
|
}
|
|
@@ -892,15 +1105,28 @@ static int flatten(pm_node_t *node) {
|
|
|
892
1105
|
R("expression", n->expression);
|
|
893
1106
|
break;
|
|
894
1107
|
}
|
|
1108
|
+
case PM_ASSOC_SPLAT_NODE: {
|
|
1109
|
+
/* `**h` in argument position — splice a hash's entries as
|
|
1110
|
+
keyword args. Wraps the inner hash expression; codegen
|
|
1111
|
+
handles the expansion at call sites. Issue #917. */
|
|
1112
|
+
pm_assoc_splat_node_t *n = (pm_assoc_splat_node_t *)node;
|
|
1113
|
+
N("AssocSplatNode");
|
|
1114
|
+
R("value", n->value);
|
|
1115
|
+
break;
|
|
1116
|
+
}
|
|
895
1117
|
case PM_SUPER_NODE: {
|
|
896
1118
|
pm_super_node_t *n = (pm_super_node_t *)node;
|
|
897
1119
|
N("SuperNode");
|
|
898
1120
|
R("arguments", n->arguments);
|
|
1121
|
+
R("block", n->block);
|
|
899
1122
|
break;
|
|
900
1123
|
}
|
|
901
|
-
case PM_FORWARDING_SUPER_NODE:
|
|
1124
|
+
case PM_FORWARDING_SUPER_NODE: {
|
|
1125
|
+
pm_forwarding_super_node_t *n = (pm_forwarding_super_node_t *)node;
|
|
902
1126
|
N("ForwardingSuperNode");
|
|
1127
|
+
R("block", (pm_node_t *)n->block);
|
|
903
1128
|
break;
|
|
1129
|
+
}
|
|
904
1130
|
case PM_MULTI_WRITE_NODE: {
|
|
905
1131
|
pm_multi_write_node_t *n = (pm_multi_write_node_t *)node;
|
|
906
1132
|
N("MultiWriteNode");
|
|
@@ -1001,6 +1227,79 @@ static int flatten(pm_node_t *node) {
|
|
|
1001
1227
|
R("right", n->right);
|
|
1002
1228
|
break;
|
|
1003
1229
|
}
|
|
1230
|
+
case PM_ARRAY_PATTERN_NODE: {
|
|
1231
|
+
/* `case x in [a, b, c]`. requireds is the list of fixed-position
|
|
1232
|
+
sub-patterns. rest / posts cover `[a, *, c]`. constant covers
|
|
1233
|
+
`Foo[a, b]` (Foo() destructuring). Minimal initial support:
|
|
1234
|
+
emit requireds as a node-id array; rest / posts / constant
|
|
1235
|
+
handled later when the codegen path catches up. Issue #669. */
|
|
1236
|
+
pm_array_pattern_node_t *n = (pm_array_pattern_node_t *)node;
|
|
1237
|
+
N("ArrayPatternNode");
|
|
1238
|
+
R("constant", n->constant);
|
|
1239
|
+
A("requireds", &n->requireds);
|
|
1240
|
+
R("rest", n->rest);
|
|
1241
|
+
A("posts", &n->posts);
|
|
1242
|
+
break;
|
|
1243
|
+
}
|
|
1244
|
+
case PM_HASH_PATTERN_NODE: {
|
|
1245
|
+
/* `case x in {a:, b: 2}`. elements is a list of AssocNodes
|
|
1246
|
+
(key + sub-pattern); a `:b:` shorthand binds the key's symbol
|
|
1247
|
+
as a same-named LV. Constant covers `Foo[a:]` destructuring
|
|
1248
|
+
(not yet handled by codegen). Rest covers `**rest` (also not
|
|
1249
|
+
yet handled). Issue #805. */
|
|
1250
|
+
pm_hash_pattern_node_t *n = (pm_hash_pattern_node_t *)node;
|
|
1251
|
+
N("HashPatternNode");
|
|
1252
|
+
R("constant", n->constant);
|
|
1253
|
+
A("elements", &n->elements);
|
|
1254
|
+
R("rest", n->rest);
|
|
1255
|
+
break;
|
|
1256
|
+
}
|
|
1257
|
+
case PM_FIND_PATTERN_NODE: {
|
|
1258
|
+
/* `case x in [*a, b, *c]` -- find-anywhere pattern with leading
|
|
1259
|
+
and trailing wildcards plus required middle elements.
|
|
1260
|
+
Currently surfaces all three slots so the codegen can match
|
|
1261
|
+
on length + extract requireds; the find-anywhere semantics
|
|
1262
|
+
(variable-position match) are not yet implemented but the
|
|
1263
|
+
shape no longer drops to UnsupportedNode. Issue #805. */
|
|
1264
|
+
pm_find_pattern_node_t *n = (pm_find_pattern_node_t *)node;
|
|
1265
|
+
N("FindPatternNode");
|
|
1266
|
+
R("constant", n->constant);
|
|
1267
|
+
R("left", (pm_node_t *)n->left);
|
|
1268
|
+
A("requireds", &n->requireds);
|
|
1269
|
+
R("right", n->right);
|
|
1270
|
+
break;
|
|
1271
|
+
}
|
|
1272
|
+
case PM_CAPTURE_PATTERN_NODE: {
|
|
1273
|
+
/* `case x in pat => var` -- match `pat`, bind matched value to
|
|
1274
|
+
`var` (LocalVariableTargetNode). Issue #884. */
|
|
1275
|
+
pm_capture_pattern_node_t *n = (pm_capture_pattern_node_t *)node;
|
|
1276
|
+
N("CapturePatternNode");
|
|
1277
|
+
R("value", (pm_node_t *)n->value);
|
|
1278
|
+
R("target", (pm_node_t *)n->target);
|
|
1279
|
+
break;
|
|
1280
|
+
}
|
|
1281
|
+
case PM_PINNED_EXPRESSION_NODE: {
|
|
1282
|
+
/* `case x in ^(expr)`. The pinned expression is evaluated at
|
|
1283
|
+
match time and compared by `==` against the scrutinee. */
|
|
1284
|
+
pm_pinned_expression_node_t *n = (pm_pinned_expression_node_t *)node;
|
|
1285
|
+
N("PinnedExpressionNode");
|
|
1286
|
+
R("expression", n->expression);
|
|
1287
|
+
break;
|
|
1288
|
+
}
|
|
1289
|
+
case PM_PINNED_VARIABLE_NODE: {
|
|
1290
|
+
/* `case x in ^var`. The wrapped variable can be any read-shape
|
|
1291
|
+
node prism emits for `^var` -- LocalVariableReadNode,
|
|
1292
|
+
InstanceVariableReadNode, ClassVariableReadNode,
|
|
1293
|
+
GlobalVariableReadNode, ConstantReadNode,
|
|
1294
|
+
NumberedReferenceReadNode, BackReferenceReadNode. Routed to
|
|
1295
|
+
the same `@nd_expression` slot as PinnedExpressionNode so the
|
|
1296
|
+
codegen treats them uniformly -- both are "match the scrutinee
|
|
1297
|
+
by `==` against this expression". */
|
|
1298
|
+
pm_pinned_variable_node_t *n = (pm_pinned_variable_node_t *)node;
|
|
1299
|
+
N("PinnedVariableNode");
|
|
1300
|
+
R("expression", n->variable);
|
|
1301
|
+
break;
|
|
1302
|
+
}
|
|
1004
1303
|
case PM_NUMBERED_PARAMETERS_NODE: {
|
|
1005
1304
|
pm_numbered_parameters_node_t *n = (pm_numbered_parameters_node_t *)node;
|
|
1006
1305
|
N("NumberedParametersNode");
|
|
@@ -1185,11 +1484,19 @@ static int flatten(pm_node_t *node) {
|
|
|
1185
1484
|
static char *read_file(const char *path) {
|
|
1186
1485
|
FILE *f = fopen(path, "rb");
|
|
1187
1486
|
if (!f) return NULL;
|
|
1188
|
-
fseek(f, 0, SEEK_END);
|
|
1487
|
+
if (fseek(f, 0, SEEK_END) != 0) { fclose(f); return NULL; }
|
|
1189
1488
|
long len = ftell(f);
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1489
|
+
/* Issue #768: ftell returning -1 (stream error) used to wrap len + 1
|
|
1490
|
+
to 0, malloc(0) returns NULL, then fread(NULL, 1, SIZE_MAX, f)
|
|
1491
|
+
tried to read 16 exabytes. Bail cleanly. */
|
|
1492
|
+
if (len < 0) { fclose(f); return NULL; }
|
|
1493
|
+
if (fseek(f, 0, SEEK_SET) != 0) { fclose(f); return NULL; }
|
|
1494
|
+
char *buf = malloc((size_t)len + 1);
|
|
1495
|
+
if (!buf) { fclose(f); return NULL; }
|
|
1496
|
+
size_t nread = fread(buf, 1, (size_t)len, f);
|
|
1497
|
+
/* Issue #763: detect short read and bail rather than processing
|
|
1498
|
+
a truncated source file silently. */
|
|
1499
|
+
if (nread != (size_t)len) { free(buf); fclose(f); return NULL; }
|
|
1193
1500
|
buf[nread] = '\0';
|
|
1194
1501
|
fclose(f);
|
|
1195
1502
|
return buf;
|
|
@@ -1204,27 +1511,44 @@ static int sp_included_cap = 0;
|
|
|
1204
1511
|
|
|
1205
1512
|
/* Resolve a path to its canonical form for dedup. realpath() returns NULL
|
|
1206
1513
|
on missing files; in that case fall back to the literal path. */
|
|
1514
|
+
/* Issue #749: realpath/_fullpath + strdup can both fail under OOM,
|
|
1515
|
+
leaving callers with a NULL pointer that goes to strcmp(NULL, ...)
|
|
1516
|
+
and segfaults. Fall back to a static empty string so downstream
|
|
1517
|
+
`strcmp(canonical, ...) == 0` consistently misses (the caller then
|
|
1518
|
+
treats this as "not already included" and proceeds with the file
|
|
1519
|
+
read, which fails through the normal LoadError path). */
|
|
1207
1520
|
static char *sp_canonical_path(const char *path) {
|
|
1521
|
+
if (!path) { char *e = strdup(""); return e ? e : NULL; }
|
|
1208
1522
|
#ifdef _WIN32
|
|
1209
1523
|
char *real = _fullpath(NULL, path, 0);
|
|
1210
1524
|
#else
|
|
1211
1525
|
char *real = realpath(path, NULL);
|
|
1212
1526
|
#endif
|
|
1213
|
-
|
|
1527
|
+
if (real) return real;
|
|
1528
|
+
char *d = strdup(path);
|
|
1529
|
+
if (d) return d;
|
|
1530
|
+
/* Last resort: return a static empty string to avoid NULL. The
|
|
1531
|
+
buffer is read-only by callers (passed to strcmp, then freed by
|
|
1532
|
+
the caller's free() -- so allocate a fresh empty string instead
|
|
1533
|
+
of returning a string literal). */
|
|
1534
|
+
return strdup("");
|
|
1214
1535
|
}
|
|
1215
1536
|
|
|
1216
1537
|
static int sp_path_already_included(const char *canonical) {
|
|
1538
|
+
if (!canonical) return 0;
|
|
1217
1539
|
for (int i = 0; i < sp_included_count; i++) {
|
|
1218
|
-
if (strcmp(sp_included_paths[i], canonical) == 0) return 1;
|
|
1540
|
+
if (sp_included_paths[i] && strcmp(sp_included_paths[i], canonical) == 0) return 1;
|
|
1219
1541
|
}
|
|
1220
1542
|
return 0;
|
|
1221
1543
|
}
|
|
1222
1544
|
|
|
1223
1545
|
static void sp_mark_path_included(const char *canonical) {
|
|
1224
1546
|
if (sp_included_count >= sp_included_cap) {
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1547
|
+
int new_cap = sp_included_cap == 0 ? 16 : sp_included_cap * 2;
|
|
1548
|
+
char **np = (char **)realloc(sp_included_paths, sizeof(char *) * new_cap);
|
|
1549
|
+
if (!np) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
1550
|
+
sp_included_paths = np;
|
|
1551
|
+
sp_included_cap = new_cap;
|
|
1228
1552
|
}
|
|
1229
1553
|
sp_included_paths[sp_included_count++] = strdup(canonical);
|
|
1230
1554
|
}
|
|
@@ -1242,6 +1566,108 @@ static void sp_includes_free(void) {
|
|
|
1242
1566
|
sp_included_cap = 0;
|
|
1243
1567
|
}
|
|
1244
1568
|
|
|
1569
|
+
/* ---- Debug multi-file source map (g_emit_line only) -------------------
|
|
1570
|
+
require/require_relative are resolved by *textual* splicing into one
|
|
1571
|
+
buffer, so a node's Prism line is a line in that concatenated buffer and
|
|
1572
|
+
the original file boundaries are lost. For --debug we recover them: each
|
|
1573
|
+
spliced file's content is wrapped in PUSH/POP marker *comments* (Prism
|
|
1574
|
+
ignores comments, so the AST is unchanged), and a single pass over the
|
|
1575
|
+
final buffer reconstructs, per buffer line, which file and original line
|
|
1576
|
+
it came from. The stack accounting needs no original-line bookkeeping at
|
|
1577
|
+
splice time: a PUSH consumes the parent's (replaced) require line, then
|
|
1578
|
+
content lines count within the child's own coordinates until POP. */
|
|
1579
|
+
#define SP_PUSH_PREFIX "#<SPINEL_PUSH>"
|
|
1580
|
+
#define SP_POP_PREFIX "#<SPINEL_POP>"
|
|
1581
|
+
|
|
1582
|
+
static char **sp_file_table = NULL; /* id -> path */
|
|
1583
|
+
static int sp_file_count = 0, sp_file_cap = 0;
|
|
1584
|
+
|
|
1585
|
+
static int sp_intern_file(const char *path) {
|
|
1586
|
+
for (int i = 0; i < sp_file_count; i++)
|
|
1587
|
+
if (strcmp(sp_file_table[i], path) == 0) return i;
|
|
1588
|
+
if (sp_file_count >= sp_file_cap) {
|
|
1589
|
+
int nc = sp_file_cap == 0 ? 8 : sp_file_cap * 2;
|
|
1590
|
+
char **np = (char **)realloc(sp_file_table, sizeof(char *) * nc);
|
|
1591
|
+
if (!np) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
1592
|
+
sp_file_table = np; sp_file_cap = nc;
|
|
1593
|
+
}
|
|
1594
|
+
char *dup_path = strdup(path);
|
|
1595
|
+
if (!dup_path) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
1596
|
+
sp_file_table[sp_file_count] = dup_path;
|
|
1597
|
+
return sp_file_count++;
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
/* In debug mode, wrap an included file's (already-resolved) content with
|
|
1601
|
+
PUSH <path> / POP marker lines. Takes ownership of `content`; returns it
|
|
1602
|
+
unchanged when not in debug mode. */
|
|
1603
|
+
static char *sp_wrap_included(char *content, const char *path) {
|
|
1604
|
+
if (!g_emit_line) return content;
|
|
1605
|
+
size_t clen = strlen(content);
|
|
1606
|
+
int need_nl = (clen > 0 && content[clen - 1] != '\n') ? 1 : 0;
|
|
1607
|
+
size_t total = strlen(SP_PUSH_PREFIX) + strlen(path) + 1 + clen + need_nl
|
|
1608
|
+
+ strlen(SP_POP_PREFIX) + 1 + 1;
|
|
1609
|
+
char *w = malloc(total + 8);
|
|
1610
|
+
if (!w) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
1611
|
+
size_t o = (size_t)sprintf(w, SP_PUSH_PREFIX "%s\n", path);
|
|
1612
|
+
memcpy(w + o, content, clen); o += clen;
|
|
1613
|
+
if (need_nl) w[o++] = '\n';
|
|
1614
|
+
o += (size_t)sprintf(w + o, SP_POP_PREFIX "\n");
|
|
1615
|
+
w[o] = '\0';
|
|
1616
|
+
free(content);
|
|
1617
|
+
return w;
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
/* Reconstruct the line map from the final spliced buffer. toplevel is the
|
|
1621
|
+
path of the outermost file (interned as the initial frame). */
|
|
1622
|
+
static void sp_build_line_map(const char *src, const char *toplevel) {
|
|
1623
|
+
size_t nlines = 1;
|
|
1624
|
+
for (const char *p = src; *p; p++) if (*p == '\n') nlines++;
|
|
1625
|
+
sp_line_map_n = (int)nlines;
|
|
1626
|
+
sp_line_file = (int *)calloc(nlines + 2, sizeof(int));
|
|
1627
|
+
sp_line_orig = (int *)calloc(nlines + 2, sizeof(int));
|
|
1628
|
+
|
|
1629
|
+
int *stk_file = (int *)malloc(sizeof(int) * (nlines + 2));
|
|
1630
|
+
int *stk_next = (int *)malloc(sizeof(int) * (nlines + 2));
|
|
1631
|
+
if (!sp_line_file || !sp_line_orig || !stk_file || !stk_next) {
|
|
1632
|
+
fprintf(stderr, "spinel_parse: out of memory\n"); exit(1);
|
|
1633
|
+
}
|
|
1634
|
+
int sp = 0;
|
|
1635
|
+
stk_file[sp] = sp_intern_file(toplevel);
|
|
1636
|
+
stk_next[sp] = 1;
|
|
1637
|
+
|
|
1638
|
+
int bl = 1;
|
|
1639
|
+
const char *line = src;
|
|
1640
|
+
while (1) {
|
|
1641
|
+
const char *eol = strchr(line, '\n');
|
|
1642
|
+
size_t len = eol ? (size_t)(eol - line) : strlen(line);
|
|
1643
|
+
if (strncmp(line, SP_PUSH_PREFIX, strlen(SP_PUSH_PREFIX)) == 0) {
|
|
1644
|
+
/* The replaced require occupied one parent line: consume it. */
|
|
1645
|
+
if (sp >= 0) stk_next[sp] += 1;
|
|
1646
|
+
char pathbuf[1024];
|
|
1647
|
+
size_t plen = len - strlen(SP_PUSH_PREFIX);
|
|
1648
|
+
if (plen >= sizeof(pathbuf)) plen = sizeof(pathbuf) - 1;
|
|
1649
|
+
memcpy(pathbuf, line + strlen(SP_PUSH_PREFIX), plen);
|
|
1650
|
+
pathbuf[plen] = '\0';
|
|
1651
|
+
sp++;
|
|
1652
|
+
stk_file[sp] = sp_intern_file(pathbuf);
|
|
1653
|
+
stk_next[sp] = 1;
|
|
1654
|
+
/* marker line maps to nothing meaningful */
|
|
1655
|
+
} else if (strncmp(line, SP_POP_PREFIX, strlen(SP_POP_PREFIX)) == 0) {
|
|
1656
|
+
if (sp > 0) sp--;
|
|
1657
|
+
} else {
|
|
1658
|
+
sp_line_file[bl] = stk_file[sp];
|
|
1659
|
+
sp_line_orig[bl] = stk_next[sp];
|
|
1660
|
+
stk_next[sp] += 1;
|
|
1661
|
+
}
|
|
1662
|
+
bl++;
|
|
1663
|
+
if (!eol) break;
|
|
1664
|
+
line = eol + 1;
|
|
1665
|
+
if (*line == '\0') break;
|
|
1666
|
+
}
|
|
1667
|
+
free(stk_file);
|
|
1668
|
+
free(stk_next);
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1245
1671
|
/* Simple require_relative resolver: replace lines matching
|
|
1246
1672
|
require_relative "path" with the file content. Files that have
|
|
1247
1673
|
already been included once are silently skipped on subsequent
|
|
@@ -1289,12 +1715,16 @@ static char *resolve_requires(const char *source, const char *source_path) {
|
|
|
1289
1715
|
if (!end || end > line_end) { scan_from = pos + 1; continue; }
|
|
1290
1716
|
|
|
1291
1717
|
size_t path_len = end - start;
|
|
1718
|
+
/* Issue #765: bail rather than silently truncating overlong paths
|
|
1719
|
+
into the fixed-size buffers. */
|
|
1720
|
+
if (path_len >= sizeof(((struct {char x[512];}*)0)->x)) { scan_from = pos + 1; continue; }
|
|
1292
1721
|
char rel_path[512];
|
|
1293
1722
|
snprintf(rel_path, sizeof(rel_path), "%.*s", (int)path_len, start);
|
|
1294
1723
|
|
|
1295
1724
|
/* Build full path */
|
|
1296
1725
|
char full_path[1024];
|
|
1297
|
-
snprintf(full_path, sizeof(full_path), "%s/%s", dir, rel_path);
|
|
1726
|
+
int fp_n = snprintf(full_path, sizeof(full_path), "%s/%s", dir, rel_path);
|
|
1727
|
+
if (fp_n < 0 || (size_t)fp_n >= sizeof(full_path)) { scan_from = pos + 1; continue; }
|
|
1298
1728
|
{
|
|
1299
1729
|
size_t fl = strlen(full_path);
|
|
1300
1730
|
if (fl < sizeof(full_path) - 4 && (fl < 3 || strcmp(full_path + fl - 3, ".rb") != 0))
|
|
@@ -1311,6 +1741,9 @@ static char *resolve_requires(const char *source, const char *source_path) {
|
|
|
1311
1741
|
sp_mark_path_included(canonical);
|
|
1312
1742
|
content = read_file(full_path);
|
|
1313
1743
|
if (!content) {
|
|
1744
|
+
fprintf(stderr,
|
|
1745
|
+
"warning: require_relative \"%s\" from %s could not be resolved (no such file: %s); the call is ignored\n",
|
|
1746
|
+
rel_path, source_path, full_path);
|
|
1314
1747
|
content = strdup("# require_relative not found");
|
|
1315
1748
|
} else {
|
|
1316
1749
|
/* Recursively resolve */
|
|
@@ -1321,6 +1754,10 @@ static char *resolve_requires(const char *source, const char *source_path) {
|
|
|
1321
1754
|
free(canonical);
|
|
1322
1755
|
}
|
|
1323
1756
|
|
|
1757
|
+
/* Debug: wrap with PUSH/POP markers so the line map can attribute this
|
|
1758
|
+
file's nodes to the right source. No-op outside --debug. */
|
|
1759
|
+
content = sp_wrap_included(content, full_path);
|
|
1760
|
+
|
|
1324
1761
|
/* Replace the line */
|
|
1325
1762
|
size_t line_len = (line_end - pos) + ((*line_end == '\n') ? 1 : 0);
|
|
1326
1763
|
size_t content_len = strlen(content);
|
|
@@ -1344,6 +1781,20 @@ static char *resolve_requires(const char *source, const char *source_path) {
|
|
|
1344
1781
|
return result;
|
|
1345
1782
|
}
|
|
1346
1783
|
|
|
1784
|
+
/* A `require "X"` whose X has no bundled lib/X.rb may still be provided
|
|
1785
|
+
natively by the Spinel runtime/codegen (e.g. the JSON module). Such a
|
|
1786
|
+
require is a harmless no-op and must not warn. Bundled .rb libs (set,
|
|
1787
|
+
stringio, strscan, erb, ...) are resolved by file existence and never
|
|
1788
|
+
reach the not-found branch, so they don't belong here -- only the
|
|
1789
|
+
C-native modules that map to a stdlib require name do. */
|
|
1790
|
+
static int sp_lib_is_native(const char *name) {
|
|
1791
|
+
static const char *const natives[] = { "json", NULL };
|
|
1792
|
+
for (int i = 0; natives[i]; i++) {
|
|
1793
|
+
if (strcmp(name, natives[i]) == 0) return 1;
|
|
1794
|
+
}
|
|
1795
|
+
return 0;
|
|
1796
|
+
}
|
|
1797
|
+
|
|
1347
1798
|
/* ---- Plain require resolution ---- */
|
|
1348
1799
|
static char *resolve_plain_requires(char *source, const char *exe_path) {
|
|
1349
1800
|
/* Find lib/ directory relative to this executable */
|
|
@@ -1356,10 +1807,20 @@ static char *resolve_plain_requires(char *source, const char *exe_path) {
|
|
|
1356
1807
|
|
|
1357
1808
|
char *result = source;
|
|
1358
1809
|
char *pos;
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1810
|
+
/* Match a `require` at the very start of the buffer (offset 0) or
|
|
1811
|
+
immediately after a newline. Re-checking offset 0 every iteration --
|
|
1812
|
+
not just while `result == source` -- is what lets a first-line
|
|
1813
|
+
`require` still be processed when a later `require` exists: once the
|
|
1814
|
+
buffer is rebuilt below, `result != source`, and the old condition
|
|
1815
|
+
stranded the line-1 require. */
|
|
1816
|
+
for (;;) {
|
|
1817
|
+
if (strncmp(result, "require ", 8) == 0) {
|
|
1818
|
+
pos = result;
|
|
1819
|
+
} else {
|
|
1820
|
+
pos = strstr(result, "\nrequire ");
|
|
1821
|
+
if (pos == NULL) break;
|
|
1822
|
+
pos++; /* skip the matched newline */
|
|
1823
|
+
}
|
|
1363
1824
|
char *line_end = strchr(pos, '\n');
|
|
1364
1825
|
if (!line_end) line_end = pos + strlen(pos);
|
|
1365
1826
|
|
|
@@ -1397,7 +1858,16 @@ static char *resolve_plain_requires(char *source, const char *exe_path) {
|
|
|
1397
1858
|
free(canonical);
|
|
1398
1859
|
content = read_file(lib_path);
|
|
1399
1860
|
if (!content) {
|
|
1400
|
-
|
|
1861
|
+
if (sp_lib_is_native(lib_name)) {
|
|
1862
|
+
/* Provided natively by the Spinel runtime; the require is a
|
|
1863
|
+
harmless no-op, so don't warn. */
|
|
1864
|
+
content = strdup("# require provided by Spinel runtime");
|
|
1865
|
+
} else {
|
|
1866
|
+
fprintf(stderr,
|
|
1867
|
+
"warning: '%s' is not available in Spinel; the require is ignored and code using it will fail\n",
|
|
1868
|
+
lib_name);
|
|
1869
|
+
content = strdup("# require not resolved");
|
|
1870
|
+
}
|
|
1401
1871
|
} else {
|
|
1402
1872
|
char *resolved = resolve_requires(content, lib_path);
|
|
1403
1873
|
free(content);
|
|
@@ -1405,7 +1875,51 @@ static char *resolve_plain_requires(char *source, const char *exe_path) {
|
|
|
1405
1875
|
}
|
|
1406
1876
|
}
|
|
1407
1877
|
|
|
1408
|
-
|
|
1878
|
+
/* A trailing same-line modifier (`rescue`, `if`, `unless`, `and`,
|
|
1879
|
+
`&&`, ...) puts the require in expression position: `require 'x'
|
|
1880
|
+
rescue nil`. Replacing it with inlined statements or a comment
|
|
1881
|
+
strands the modifier and Prism reports `unexpected 'rescue'`.
|
|
1882
|
+
Substitute a `nil` expression instead so the modifier attaches;
|
|
1883
|
+
an optional/unavailable require degrades to nil, which is what the
|
|
1884
|
+
`rescue` guards for. `;`, `#`, newline and EOF are statement
|
|
1885
|
+
boundaries, not modifiers, and keep the normal inlining path. */
|
|
1886
|
+
{
|
|
1887
|
+
char *trail = end + 1;
|
|
1888
|
+
while (*trail == ' ' || *trail == '\t') trail++;
|
|
1889
|
+
/* `\r` is part of a CRLF line ending, not a modifier: treat it as a
|
|
1890
|
+
statement boundary so Windows sources keep the normal inlining
|
|
1891
|
+
path. */
|
|
1892
|
+
if (*trail != '\n' && *trail != '\r' && *trail != ';' &&
|
|
1893
|
+
*trail != '\0' && *trail != '#') {
|
|
1894
|
+
free(content);
|
|
1895
|
+
size_t rl_len = (size_t)((end + 1) - pos); /* the `require 'x'` span */
|
|
1896
|
+
size_t result_len = strlen(result);
|
|
1897
|
+
size_t before_len = (size_t)(pos - result);
|
|
1898
|
+
char *new_result = malloc(result_len - rl_len + 4);
|
|
1899
|
+
memcpy(new_result, result, before_len);
|
|
1900
|
+
memcpy(new_result + before_len, "nil", 3);
|
|
1901
|
+
memcpy(new_result + before_len + 3, pos + rl_len,
|
|
1902
|
+
result_len - before_len - rl_len + 1);
|
|
1903
|
+
free(result);
|
|
1904
|
+
result = new_result;
|
|
1905
|
+
continue;
|
|
1906
|
+
}
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
/* Debug: marker-wrap so plain-require'd lib content doesn't corrupt the
|
|
1910
|
+
line map's accounting for code after the require. No-op without --debug. */
|
|
1911
|
+
content = sp_wrap_included(content, lib_path);
|
|
1912
|
+
|
|
1913
|
+
/* Replace only the `require "name"` statement itself, not the whole
|
|
1914
|
+
line, so `require "x"; code` keeps `code`. Consume trailing
|
|
1915
|
+
horizontal whitespace and a single terminating newline (so a
|
|
1916
|
+
require on its own line leaves no blank line); stop at `;` or any
|
|
1917
|
+
other trailing code, which the inserted content's trailing newline
|
|
1918
|
+
then pushes onto its own line. */
|
|
1919
|
+
char *stmt_end = end + 1; /* just past the closing quote */
|
|
1920
|
+
while (*stmt_end == ' ' || *stmt_end == '\t') stmt_end++;
|
|
1921
|
+
if (*stmt_end == '\n') stmt_end++;
|
|
1922
|
+
size_t line_len = stmt_end - pos;
|
|
1409
1923
|
size_t content_len = strlen(content);
|
|
1410
1924
|
size_t result_len = strlen(result);
|
|
1411
1925
|
size_t before_len = pos - result;
|
|
@@ -1423,8 +1937,21 @@ static char *resolve_plain_requires(char *source, const char *exe_path) {
|
|
|
1423
1937
|
}
|
|
1424
1938
|
|
|
1425
1939
|
/* ---- Syntax sugar rewriting ---- */
|
|
1940
|
+
|
|
1941
|
+
/* Ruby method-name char class: idents, digits, `?` / `!` / `=` suffixes,
|
|
1942
|
+
operator-method chars (`+`, `-`, `*`, etc.), and `[` / `]` for the
|
|
1943
|
+
index operators `[]` and `[]=`. Digits are allowed in the body but
|
|
1944
|
+
the macro rejects digit-leading names (invalid Ruby method syntax). */
|
|
1945
|
+
static int sp_is_method_name_char(char c) {
|
|
1946
|
+
return c == '_' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ||
|
|
1947
|
+
(c >= '0' && c <= '9') || c == '?' || c == '!' || c == '+' ||
|
|
1948
|
+
c == '-' || c == '*' || c == '/' || c == '<' || c == '>' ||
|
|
1949
|
+
c == '=' || c == '&' || c == '|' || c == '^' || c == '~' ||
|
|
1950
|
+
c == '%' || c == '[' || c == ']';
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1426
1953
|
static char *rewrite_syntax_sugar(char *source) {
|
|
1427
|
-
/* Rewrite .send(:
|
|
1954
|
+
/* Rewrite .send(:foo, args) / .send("foo", args) → .foo(args) */
|
|
1428
1955
|
/* Rewrite &:symbol → { |_spx| _spx.symbol } */
|
|
1429
1956
|
size_t len = strlen(source);
|
|
1430
1957
|
size_t cap = len * 2 + 256;
|
|
@@ -1432,68 +1959,184 @@ static char *rewrite_syntax_sugar(char *source) {
|
|
|
1432
1959
|
size_t oi = 0;
|
|
1433
1960
|
size_t i = 0;
|
|
1434
1961
|
|
|
1435
|
-
#define OUT_CHAR(c) do { if (oi >= cap - 1) { cap
|
|
1962
|
+
#define OUT_CHAR(c) do { if (oi >= cap - 1) { size_t _nc = cap * 2; char *_no = realloc(out, _nc); if (!_no) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); } out = _no; cap = _nc; } out[oi++] = (c); } while(0)
|
|
1436
1963
|
#define OUT_STR(s) do { const char *_s = (s); while (*_s) { OUT_CHAR(*_s); _s++; } } while(0)
|
|
1437
1964
|
|
|
1965
|
+
/* Rewrite one .send(:foo / .send("foo dispatch. `string_form` is 1
|
|
1966
|
+
for the double-quoted variant (requires a closing `"`) and 0 for
|
|
1967
|
+
the colon-symbol variant. On mismatch (empty / digit-leading
|
|
1968
|
+
name, unclosed quote), emits the prefix verbatim and advances
|
|
1969
|
+
past it so the outer loop resumes scanning. The args copy tracks
|
|
1970
|
+
`"..."` and `'...'` state with `\` escape skipping so parens
|
|
1971
|
+
inside string literals do not prematurely close the call. */
|
|
1972
|
+
#define REWRITE_SEND_CALL(prefix_str, prefix_len, string_form) do { \
|
|
1973
|
+
size_t _save_i = i; \
|
|
1974
|
+
i += (prefix_len); \
|
|
1975
|
+
size_t _ns = i; \
|
|
1976
|
+
while (i < len && sp_is_method_name_char(source[i])) i++; \
|
|
1977
|
+
size_t _name_len = i - _ns; \
|
|
1978
|
+
int _ok = (_name_len > 0); \
|
|
1979
|
+
/* Reject digit-leading names: `.123foo()` is not valid Ruby. */ \
|
|
1980
|
+
if (_ok && source[_ns] >= '0' && source[_ns] <= '9') { _ok = 0; } \
|
|
1981
|
+
if (_ok && (string_form)) { \
|
|
1982
|
+
if (i >= len || source[i] != '"') { _ok = 0; } \
|
|
1983
|
+
else { i++; /* skip closing quote */ } \
|
|
1984
|
+
} \
|
|
1985
|
+
if (!_ok) { i = _save_i; OUT_STR(prefix_str); i += (prefix_len); } \
|
|
1986
|
+
else { \
|
|
1987
|
+
OUT_CHAR('.'); \
|
|
1988
|
+
{ size_t _k; for (_k = 0; _k < _name_len; _k++) OUT_CHAR(source[_ns + _k]); } \
|
|
1989
|
+
if (i < len && source[i] == ')') { \
|
|
1990
|
+
i++; /* no args */ \
|
|
1991
|
+
} else if (i < len && source[i] == ',') { \
|
|
1992
|
+
i++; \
|
|
1993
|
+
while (i < len && source[i] == ' ') i++; \
|
|
1994
|
+
OUT_CHAR('('); \
|
|
1995
|
+
{ int _depth = 1; char _qc = 0; \
|
|
1996
|
+
while (i < len && _depth > 0) { \
|
|
1997
|
+
char _ac = source[i]; \
|
|
1998
|
+
if (_qc != 0) { \
|
|
1999
|
+
/* Inside string: `\` escapes next char, skip it as a pair. */ \
|
|
2000
|
+
if (_ac == '\\' && i + 1 < len) { \
|
|
2001
|
+
OUT_CHAR(_ac); OUT_CHAR(source[i + 1]); i += 2; continue; \
|
|
2002
|
+
} \
|
|
2003
|
+
if (_ac == _qc) _qc = 0; \
|
|
2004
|
+
OUT_CHAR(_ac); i++; continue; \
|
|
2005
|
+
} \
|
|
2006
|
+
if (_ac == '"' || _ac == '\'') { _qc = _ac; OUT_CHAR(_ac); i++; continue; } \
|
|
2007
|
+
if (_ac == '(') _depth++; \
|
|
2008
|
+
else if (_ac == ')') { _depth--; if (_depth == 0) { i++; break; } } \
|
|
2009
|
+
OUT_CHAR(_ac); i++; \
|
|
2010
|
+
} } \
|
|
2011
|
+
OUT_CHAR(')'); \
|
|
2012
|
+
} \
|
|
2013
|
+
} \
|
|
2014
|
+
} while(0)
|
|
2015
|
+
|
|
1438
2016
|
while (i < len) {
|
|
1439
|
-
/* .send(:
|
|
2017
|
+
/* .send(:foo, args) → .foo(args) */
|
|
1440
2018
|
if (i + 7 < len && strncmp(source + i, ".send(:", 7) == 0) {
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
source[i] == '~' || source[i] == '%')) i++;
|
|
1450
|
-
size_t name_len = i - ns;
|
|
1451
|
-
if (name_len > 0) {
|
|
1452
|
-
OUT_CHAR('.');
|
|
1453
|
-
size_t k; for (k = 0; k < name_len; k++) OUT_CHAR(source[ns + k]);
|
|
1454
|
-
/* Skip optional comma + space, then copy remaining args until ) */
|
|
1455
|
-
if (i < len && source[i] == ')') {
|
|
1456
|
-
i++; /* no args */
|
|
1457
|
-
} else if (i < len && source[i] == ',') {
|
|
1458
|
-
i++; /* skip comma */
|
|
1459
|
-
while (i < len && source[i] == ' ') i++;
|
|
1460
|
-
OUT_CHAR('(');
|
|
1461
|
-
/* Copy args until matching ) */
|
|
1462
|
-
int depth = 1;
|
|
1463
|
-
while (i < len && depth > 0) {
|
|
1464
|
-
if (source[i] == '(') depth++;
|
|
1465
|
-
else if (source[i] == ')') { depth--; if (depth == 0) { i++; break; } }
|
|
1466
|
-
OUT_CHAR(source[i]); i++;
|
|
1467
|
-
}
|
|
1468
|
-
OUT_CHAR(')');
|
|
1469
|
-
}
|
|
1470
|
-
continue;
|
|
1471
|
-
}
|
|
1472
|
-
/* Failed to parse, output original */
|
|
1473
|
-
OUT_STR(".send(:");
|
|
2019
|
+
REWRITE_SEND_CALL(".send(:", 7, 0);
|
|
2020
|
+
continue;
|
|
2021
|
+
}
|
|
2022
|
+
/* .send("foo", args) → .foo(args). Plain string literal only;
|
|
2023
|
+
interpolated strings parse as InterpolatedStringNode and are
|
|
2024
|
+
left untouched (Spinel can't resolve the name statically). */
|
|
2025
|
+
if (i + 7 < len && strncmp(source + i, ".send(\"", 7) == 0) {
|
|
2026
|
+
REWRITE_SEND_CALL(".send(\"", 7, 1);
|
|
1474
2027
|
continue;
|
|
1475
2028
|
}
|
|
1476
|
-
/* (
|
|
2029
|
+
/* .__send__(:foo, args) → .foo(args). CRuby's overrides-resistant
|
|
2030
|
+
alias of send; semantically identical for Spinel's static dispatch. */
|
|
2031
|
+
if (i + 11 < len && strncmp(source + i, ".__send__(:", 11) == 0) {
|
|
2032
|
+
REWRITE_SEND_CALL(".__send__(:", 11, 0);
|
|
2033
|
+
continue;
|
|
2034
|
+
}
|
|
2035
|
+
/* .__send__("foo", args) → .foo(args). String-form variant. */
|
|
2036
|
+
if (i + 11 < len && strncmp(source + i, ".__send__(\"", 11) == 0) {
|
|
2037
|
+
REWRITE_SEND_CALL(".__send__(\"", 11, 1);
|
|
2038
|
+
continue;
|
|
2039
|
+
}
|
|
2040
|
+
/* .public_send(:foo, args) → .foo(args). Visibility isn't modeled
|
|
2041
|
+
in Spinel's static dispatch -- public_send is semantically
|
|
2042
|
+
identical to send. Issue #735. */
|
|
2043
|
+
if (i + 14 < len && strncmp(source + i, ".public_send(:", 14) == 0) {
|
|
2044
|
+
REWRITE_SEND_CALL(".public_send(:", 14, 0);
|
|
2045
|
+
continue;
|
|
2046
|
+
}
|
|
2047
|
+
if (i + 14 < len && strncmp(source + i, ".public_send(\"", 14) == 0) {
|
|
2048
|
+
REWRITE_SEND_CALL(".public_send(\"", 14, 1);
|
|
2049
|
+
continue;
|
|
2050
|
+
}
|
|
2051
|
+
/* `&:symbol` symbol-to-proc. Prism parses `&:sym` natively, but
|
|
2052
|
+
Spinel only lowers the native BlockArgumentNode+SymbolNode shape
|
|
2053
|
+
for a few methods (inject / reduce / sort_by); general block
|
|
2054
|
+
takers rely on this textual rewrite to an explicit block. The
|
|
2055
|
+
block has to land where Ruby reads it as a block, not a hash:
|
|
2056
|
+
- sole parenthesized arg `m(&:s)` -> `m { |_spx| _spx.s }`
|
|
2057
|
+
- after a positional, paren call
|
|
2058
|
+
`m(a, &:s)` -> `m(a) { |_spx| _spx.s }`
|
|
2059
|
+
- after a positional, command call
|
|
2060
|
+
`m a, &:s` -> `m a do |_spx| _spx.s end`
|
|
2061
|
+
- command-position sole arg `m &:s` -> `m { |_spx| _spx.s }`
|
|
2062
|
+
The bare `{ |_spx| ... }` was only correct in block position; a
|
|
2063
|
+
`,`-prefixed brace parses as a hash literal, which was the bundler
|
|
2064
|
+
(`File.open(f, "r:UTF-8", &:read)`) / minitest
|
|
2065
|
+
(`define_method :mu_pp, &:pretty_inspect`) parse failure.
|
|
2066
|
+
|
|
2067
|
+
Operator symbols (`&:+`) have name_len 0 here and are left for
|
|
2068
|
+
Prism's native path (the arith reduce/inject lowering handles
|
|
2069
|
+
them). Known limitation: a paren-less command carrying a
|
|
2070
|
+
symbol-proc that is itself nested as an argument inside a paren
|
|
2071
|
+
call -- `p(foo :a, &:s)` -- mis-binds the block to the outer
|
|
2072
|
+
call, because textually its args sit at the same paren depth as
|
|
2073
|
+
the enclosing call (indistinguishable without re-implementing
|
|
2074
|
+
Ruby's command/arg disambiguation). Neither target gem hits
|
|
2075
|
+
this; a robust fix is an AST-level lowering, deferred. */
|
|
1477
2076
|
if (i + 2 < len && source[i] == '&' && source[i + 1] == ':') {
|
|
1478
|
-
/*
|
|
1479
|
-
|
|
1480
|
-
|
|
2077
|
+
/* Last emitted non-space char. Skip newlines too so a multi-line
|
|
2078
|
+
`m(a,\n &:s)` still sees the comma. */
|
|
2079
|
+
size_t back = oi;
|
|
2080
|
+
while (back > 0 && (out[back - 1] == ' ' || out[back - 1] == '\t' ||
|
|
2081
|
+
out[back - 1] == '\n' || out[back - 1] == '\r')) back--;
|
|
2082
|
+
char prev = (back > 0) ? out[back - 1] : '\0';
|
|
1481
2083
|
i += 2;
|
|
1482
2084
|
size_t ns = i;
|
|
1483
2085
|
while (i < len && (source[i] == '_' || (source[i] >= 'a' && source[i] <= 'z') ||
|
|
1484
2086
|
(source[i] >= 'A' && source[i] <= 'Z') || (source[i] >= '0' && source[i] <= '9') ||
|
|
1485
2087
|
source[i] == '?' || source[i] == '!')) i++;
|
|
1486
2088
|
size_t name_len = i - ns;
|
|
1487
|
-
if (name_len
|
|
1488
|
-
/*
|
|
1489
|
-
|
|
2089
|
+
if (name_len == 0) {
|
|
2090
|
+
/* Operator / empty symbol: leave `&:` for Prism's native path. */
|
|
2091
|
+
OUT_STR("&:");
|
|
2092
|
+
continue;
|
|
2093
|
+
}
|
|
2094
|
+
if (prev == '(') {
|
|
2095
|
+
/* Sole parenthesized arg: drop the `(` (and any trailing ws)
|
|
2096
|
+
and the matching `)` so the block binds paren-less. #792:
|
|
2097
|
+
tolerate whitespace before the `)`. Restore `i` if no `)`
|
|
2098
|
+
follows so trailing content isn't swallowed. */
|
|
2099
|
+
oi = back - 1;
|
|
2100
|
+
size_t after_sym = i;
|
|
2101
|
+
while (i < len && (source[i] == ' ' || source[i] == '\t' ||
|
|
2102
|
+
source[i] == '\n' || source[i] == '\r')) i++;
|
|
2103
|
+
if (i < len && source[i] == ')') i++;
|
|
2104
|
+
else i = after_sym;
|
|
1490
2105
|
OUT_STR(" { |_spx| _spx.");
|
|
1491
|
-
size_t k; for (k = 0; k < name_len; k++) OUT_CHAR(source[ns + k]);
|
|
2106
|
+
{ size_t k; for (k = 0; k < name_len; k++) OUT_CHAR(source[ns + k]); }
|
|
1492
2107
|
OUT_STR(" }");
|
|
1493
2108
|
continue;
|
|
1494
2109
|
}
|
|
1495
|
-
if (
|
|
1496
|
-
|
|
2110
|
+
if (prev == ',') {
|
|
2111
|
+
/* After a positional arg. Drop the separating comma and
|
|
2112
|
+
relocate the block: a parenthesized call closes first then
|
|
2113
|
+
takes a brace block; a command call takes a trailing do..end
|
|
2114
|
+
(a brace would still read as a hash). Only consume up to the
|
|
2115
|
+
`)`; otherwise restore `i` so the newline/`end` that follows
|
|
2116
|
+
a paren-less command is preserved. */
|
|
2117
|
+
oi = back - 1;
|
|
2118
|
+
size_t after_sym = i;
|
|
2119
|
+
while (i < len && (source[i] == ' ' || source[i] == '\t' ||
|
|
2120
|
+
source[i] == '\n' || source[i] == '\r')) i++;
|
|
2121
|
+
if (i < len && source[i] == ')') {
|
|
2122
|
+
i++;
|
|
2123
|
+
OUT_CHAR(')');
|
|
2124
|
+
OUT_STR(" { |_spx| _spx.");
|
|
2125
|
+
{ size_t k; for (k = 0; k < name_len; k++) OUT_CHAR(source[ns + k]); }
|
|
2126
|
+
OUT_STR(" }");
|
|
2127
|
+
} else {
|
|
2128
|
+
i = after_sym;
|
|
2129
|
+
OUT_STR(" do |_spx| _spx.");
|
|
2130
|
+
{ size_t k; for (k = 0; k < name_len; k++) OUT_CHAR(source[ns + k]); }
|
|
2131
|
+
OUT_STR(" end");
|
|
2132
|
+
}
|
|
2133
|
+
continue;
|
|
2134
|
+
}
|
|
2135
|
+
/* Command-position sole arg (`m &:s`): the brace binds as a
|
|
2136
|
+
block (no comma precedes it). */
|
|
2137
|
+
OUT_STR(" { |_spx| _spx.");
|
|
2138
|
+
{ size_t k; for (k = 0; k < name_len; k++) OUT_CHAR(source[ns + k]); }
|
|
2139
|
+
OUT_STR(" }");
|
|
1497
2140
|
continue;
|
|
1498
2141
|
}
|
|
1499
2142
|
OUT_CHAR(source[i]);
|
|
@@ -1520,11 +2163,51 @@ int main(int argc, char **argv) {
|
|
|
1520
2163
|
return 1;
|
|
1521
2164
|
}
|
|
1522
2165
|
|
|
2166
|
+
/* Set the debug flag before resolving requires so the resolvers insert the
|
|
2167
|
+
PUSH/POP markers used to rebuild the multi-file source map. */
|
|
2168
|
+
{
|
|
2169
|
+
const char *dbg = getenv("SPINEL_DEBUG");
|
|
2170
|
+
const char *lm = getenv("SPINEL_LINE_MAP");
|
|
2171
|
+
int on = (dbg != NULL && dbg[0] == '1' && dbg[1] == '\0')
|
|
2172
|
+
|| (lm != NULL && lm[0] == '1' && lm[1] == '\0');
|
|
2173
|
+
g_emit_line = on ? 1 : 0;
|
|
2174
|
+
}
|
|
2175
|
+
|
|
1523
2176
|
/* Resolve require_relative and plain require */
|
|
1524
2177
|
char *resolved = resolve_requires(source, source_file);
|
|
1525
2178
|
free(source);
|
|
1526
2179
|
source = resolve_plain_requires(resolved, argv[0]);
|
|
2180
|
+
|
|
2181
|
+
/* Debug: build the buffer-line -> (file, original line) map from the
|
|
2182
|
+
marker-annotated buffer *before* syntax-sugar rewriting (which could
|
|
2183
|
+
touch a marker line's text). Sugar preserves line count, so the map
|
|
2184
|
+
stays aligned with the parsed node lines; if that ever fails to hold,
|
|
2185
|
+
disable the map rather than emit wrong attributions. */
|
|
2186
|
+
char *premap = NULL;
|
|
2187
|
+
if (g_emit_line) {
|
|
2188
|
+
premap = strdup(source);
|
|
2189
|
+
if (!premap) { fprintf(stderr, "spinel_parse: out of memory\n"); exit(1); }
|
|
2190
|
+
}
|
|
1527
2191
|
source = rewrite_syntax_sugar(source);
|
|
2192
|
+
if (g_emit_line) {
|
|
2193
|
+
size_t la = 1, lb = 1;
|
|
2194
|
+
for (const char *p = premap; *p; p++) if (*p == '\n') la++;
|
|
2195
|
+
for (const char *p = source; *p; p++) if (*p == '\n') lb++;
|
|
2196
|
+
if (la == lb) {
|
|
2197
|
+
sp_build_line_map(premap, source_file);
|
|
2198
|
+
} else {
|
|
2199
|
+
/* Multi-file line attribution unavailable for this program; #line
|
|
2200
|
+
falls back to buffer lines. Only worth a word under an explicit
|
|
2201
|
+
--debug build (faithful stepping matters there); stay silent for
|
|
2202
|
+
the default line-map so normal builds aren't noisy. */
|
|
2203
|
+
const char *dbg = getenv("SPINEL_DEBUG");
|
|
2204
|
+
if (dbg != NULL && dbg[0] == '1' && dbg[1] == '\0') {
|
|
2205
|
+
fprintf(stderr, "spinel_parse: multi-file line map disabled "
|
|
2206
|
+
"(syntax-sugar changed line count)\n");
|
|
2207
|
+
}
|
|
2208
|
+
}
|
|
2209
|
+
free(premap);
|
|
2210
|
+
}
|
|
1528
2211
|
|
|
1529
2212
|
size_t source_len = strlen(source);
|
|
1530
2213
|
|
|
@@ -1539,9 +2222,12 @@ int main(int argc, char **argv) {
|
|
|
1539
2222
|
for (diag = (pm_diagnostic_t *)parser.error_list.head; diag; diag = (pm_diagnostic_t *)diag->node.next) {
|
|
1540
2223
|
fprintf(stderr, " %s\n", diag->message);
|
|
1541
2224
|
}
|
|
2225
|
+
/* Issue #764: free the registered include paths on the parse-
|
|
2226
|
+
error exit path too. */
|
|
1542
2227
|
pm_node_destroy(&parser, root);
|
|
1543
2228
|
pm_parser_free(&parser);
|
|
1544
2229
|
free(source);
|
|
2230
|
+
sp_includes_free();
|
|
1545
2231
|
return 1;
|
|
1546
2232
|
}
|
|
1547
2233
|
|
|
@@ -1563,12 +2249,36 @@ int main(int argc, char **argv) {
|
|
|
1563
2249
|
out = fopen(argv[2], "wb");
|
|
1564
2250
|
if (!out) {
|
|
1565
2251
|
fprintf(stderr, "spinel_parse: cannot write '%s'\n", argv[2]);
|
|
2252
|
+
/* Issue #764: clean up before bailing on the output-open
|
|
2253
|
+
failure. We've allocated source, g_source_file_escaped,
|
|
2254
|
+
lines[], plus parser/root, and registered sp_included_paths
|
|
2255
|
+
entries -- free all to avoid leaking on the way out. */
|
|
2256
|
+
for (size_t i = 0; i < line_count; i++) free(lines[i]);
|
|
2257
|
+
free(lines);
|
|
2258
|
+
pm_node_destroy(&parser, root);
|
|
2259
|
+
pm_parser_free(&parser);
|
|
2260
|
+
free(source);
|
|
2261
|
+
free(g_source_file_escaped);
|
|
2262
|
+
g_source_file_escaped = NULL;
|
|
2263
|
+
sp_includes_free();
|
|
1566
2264
|
return 1;
|
|
1567
2265
|
}
|
|
1568
2266
|
}
|
|
1569
2267
|
|
|
1570
2268
|
fprintf(out, "ROOT %d\n", root_id);
|
|
1571
|
-
|
|
2269
|
+
/* Issue #878: emit the source file path as a top-level fact so
|
|
2270
|
+
`__dir__` and similar compile-time helpers can recover it
|
|
2271
|
+
even when the source contains no `__FILE__` reference. The
|
|
2272
|
+
loader stashes it in @source_file_path. */
|
|
2273
|
+
fprintf(out, "SOURCE_FILE %s\n", g_source_file_escaped);
|
|
2274
|
+
/* Debug multi-file map: emit the id -> path table so codegen can resolve
|
|
2275
|
+
each node's `node_file` id to a path for its `#line` directive. */
|
|
2276
|
+
for (int i = 0; i < sp_file_count; i++) {
|
|
2277
|
+
char *esc = escape_str((const uint8_t *)sp_file_table[i], strlen(sp_file_table[i]));
|
|
2278
|
+
fprintf(out, "FILE %d %s\n", i, esc);
|
|
2279
|
+
free(esc);
|
|
2280
|
+
}
|
|
2281
|
+
for (size_t i = 0; i < line_count; i++) {
|
|
1572
2282
|
fprintf(out, "%s\n", lines[i]);
|
|
1573
2283
|
free(lines[i]);
|
|
1574
2284
|
}
|